C # restituisce variabili

11

In un dibattito sulle variabili di ritorno, alcuni membri del team preferiscono un metodo per restituire il risultato direttamente al chiamante, mentre altri preferiscono dichiarare una variabile di ritorno che viene poi restituita al chiamante (vedi esempi di codice sotto)

L'argomento di quest'ultimo è che consente a uno sviluppatore di eseguire il debug del codice per trovare il valore di ritorno del metodo prima che ritorni al chiamante rendendo il codice più facile da capire: questo è particolarmente vero dove le chiamate al metodo sono daisy -chained.

Ci sono delle linee guida su quale sia il più efficiente e / o ci siano altri motivi per cui dovremmo adottare uno stile piuttosto che un altro?

Grazie

    private bool Is2(int a)
    {
        return a == 2;
    }

    private bool Is3(int a)
    {
        var result = a == 3;
        return result;
    }
    
posta pb01 27.03.2012 - 14:30
fonte

4 risposte

3

Poiché utilizzo Resharper con Visual Studio, Ctrl-RV (o Ctrl-Alt-V, se si utilizzano i binding di tasti Resharper / IntelliJ) trasforma il primo esempio nel secondo esempio. Quindi, quando voglio eseguire il debug, posso farlo abbastanza facilmente. E se mi dimentico di rimetterlo a posto, non mi sentirò male perché Ctrl-RI lo riporterà indietro per renderlo più facile da leggere.

Scherzi a parte, perdi tempo a discutere su cose più importanti. Come dove posizionare le parentesi graffe o gli spazi tra le tabulazioni.

    
risposta data 27.03.2012 - 15:15
fonte
17

Personalmente trovo il primo esempio più facile da leggere. Puoi ancora eseguirne il debug, impostando un punto di interruzione nell'istruzione return e aggiungendo a == 2 alla finestra di controllo o utilizzando l'orologio rapido.

Ma questa è davvero una questione di preferenze personali. Entrambe le versioni sono OK.

    
risposta data 27.03.2012 - 14:52
fonte
6

Quando il codice è facilmente leggibile come esempio, non c'è niente di sbagliato nel restituire il risultato di un'operazione logica come return a == 2 . Tuttavia, se il valore restituito è un'istruzione più complessa o appare come

return a > 2? doOptionA().getResult() > makeDecision("greaterThan2") : doOptionB().getResult() == makeDecision("lessThan2");

quindi ti consigliamo di utilizzare le variabili per archiviare le parti di quello per primo e semplificare l'istruzione return, per motivi di leggibilità.

    
risposta data 27.03.2012 - 15:06
fonte
2

In un semplice esempio come questo, uno va bene.

Per esempi più complicati, preferisco la seconda. Questo è solo perché è più leggibile e altri probabilmente dovranno mantenere il codice.

    
risposta data 27.03.2012 - 16:15
fonte

Leggi altre domande sui tag