Elimina il codice duplicato in IF nidificati senza creare una funzione [duplicato]

0

Diciamo che abbiamo due if che dipendono l'uno dall'altro:

if var exists {
    if var is array {
        //Do stuff with var
    } else {
        //Resolve the problem
    }
} else {
    //Resolve the problem in the exact same way as above
}
//Continue execution with the assumption that var is in the appropriate state

Come posso refactoring questo per rimuovere il codice duplicato senza utilizzare gotos o funzioni / metodi?

    
posta Trenton Maki 07.08.2014 - 03:31
fonte

3 risposte

12

Mi manca qualcosa di più complicato qui, o non dovrebbe essere solo questo:

if var exists and var is array {
    //Do stuff with var
} else {
    //Resolve the problem
}

//Continue execution with the assumption that var is in the appropriate state

Il controllo di if var exists andrà in cortocircuito e ricadrà nel blocco di risoluzione else se valuta su false.

    
risposta data 07.08.2014 - 03:55
fonte
1

Se non ti dispiace "fai roba con var" viene eseguito ogni volta:

if var does not exist {
    //Resolve the problem
}

if var is array {
    //Do stuff with var
} 
//Continue execution with the assumption that var is in the appropriate state

Se non vuoi che "fai roba con var" venga eseguito ogni volta (come nel codice originale):

if var does not exist {
    //Resolve the problem
    flag = true
}

if var is array && flag == true {
    //Do stuff with var
} 
//Continue execution with the assumption that var is in the appropriate state
    
risposta data 07.08.2014 - 03:42
fonte
1

Supponendo che i test non possano essere uniti in un'unica espressione, vorrei scrivere:

bool ok = false;
if var exists {
    if var is array {
        //Do stuff with var
        ok = true;
    }
}
if (!ok) {
    //Resolve the problem
}
//Continue execution with the assumption that var is in the appropriate state
    
risposta data 27.08.2014 - 15:18
fonte

Leggi altre domande sui tag