condizione di uscita della funzione sul controllo di coerenza dei parametri [duplicato]

2

Quando si controlla la consistenza dei parametri nella parte superiore di un corpo di una funzione, qual è la strategia migliore?

Questo:

protected void function(Object parameter)
    if (parameter == null) 
        return;

    //... do things
}

... o questo:

protected void function(Object parameter)
    if (parameter != null) {    
        //... do things
    }
}
    
posta Seraphim's host 12.06.2013 - 15:50
fonte

4 risposte

5

È una questione di preferenza quale stile scegli, ma sceglierei la tua prima opzione, per i seguenti motivi. A mio parere ....

  • È più pulito e più facile da leggere se si torna presto dalla funzione quando la funzione non può essere eseguita a causa di alcune condizioni.

  • Il controllo dell'uguaglianza è generalmente meno soggetto a errori semplici rispetto alla verifica della disuguaglianza. Ad esempio, è certamente più facile perdere se hai scritto la disuguaglianza come if (!parameter)

  • Il secondo esempio indica che è necessario indentare il codice un ulteriore livello.

risposta data 12.06.2013 - 16:02
fonte
2

Consiglierei di fare il primo perché è più chiaro, ma esiste una scuola di pensiero che si dovrebbe avere solo un punto di uscita da una funzione. Questa è forse una buona opportunità per usare Eccezioni se la tua lingua li supporta di solito tramite il comando throw . Ad esempio ...

protected void function(Object parameter)
    if (parameter == null) 
        throw new ArgumentNullException("parameter must not be null.");

    //... do things
}

Questo dirà al codice che chiama la funzione che si è verificato il problema piuttosto che consentire all'applicazione di continuare, supponendo che la funzione sia stata completata correttamente.

    
risposta data 12.06.2013 - 16:05
fonte
2

Il primo è il migliore perché se hai più di un parametro da controllare è molto più semplice seguire il flusso. Per esempio:.

protected void function(Object a, Object b, Object c) {
    if (a == null) {
        return;
    }
    if (b == null) {
        return;
    }
    if (c == null) {
        return;
    }
    // Do stuff
}

Anche se James ha notato che userei Eccezioni se la lingua li supporta.

    
risposta data 12.06.2013 - 16:42
fonte
1

Penso che non ci siano cambiamenti in termini di prestazioni perché in entrambi i casi il codice principale della funzione non viene valutato se il parametro è ritenuto incoerente.

Da questo punto di vista, come dice superM nel suo commento, il resto è tutto per te e dovrebbe essere il più coerente possibile nel tuo progetto.

    
risposta data 12.06.2013 - 16:00
fonte

Leggi altre domande sui tag