In einer Debatte über Rückgabevariablen bevorzugen einige Mitglieder des Teams eine Methode, um das Ergebnis direkt an den Aufrufer zurückzugeben, während andere es vorziehen, eine Rückgabevariable zu deklarieren, die dann an den Aufrufer zurückgegeben wird (siehe Codebeispiele unten).
Das Argument für Letzteres ist, dass ein Entwickler, der den Code debuggt, den Rückgabewert der Methode finden kann, bevor er zum Aufrufer zurückkehrt, wodurch der Code besser verständlich wird: Dies gilt insbesondere, wenn Methodenaufrufe in einer Kette vorliegen.
Gibt es Richtlinien, welche am effizientesten sind, und / oder gibt es andere Gründe, warum wir einen Stil über einen anderen stellen sollten?
Vielen Dank
private bool Is2(int a)
{
return a == 2;
}
private bool Is3(int a)
{
var result = a == 3;
return result;
}
c#
coding-style
return-type
pb01
quelle
quelle
result
bevor Sie es zurückgeben.stloc.0
undldloc.0
in der zweiten Version). Aber ich denke, das passiert nur im Debug-Modus. Und hier ist es sowieso nicht wirklich wichtig.a = b = c;
unda == b == c
, würde ich es vermeiden, etwas zu schreiben, das aussieht,a = b == c
wenn Sie können. Als ich zum ersten Mal eine solche Codezeile sah, brauchte ich ein paar Sekunden, um herauszufinden, was los ist. Dieser Code ragte heraus. Ich würde gerne Klammern setzena == 3
, aber StyleCop mag das nicht - ein guter Grund, Version eins zu verwenden. Noch etwas: Dies ist im Wesentlichen ein Lambda, wie za => (a == 3)
. Warum einer bereits aufgeblähten Trivialfunktion eine Codezeile hinzufügen?Antworten:
Da ich Resharper mit Visual Studio verwende, verwandelt Ctrl-RV (oder Ctrl-Alt-V, wenn Sie die Resharper / IntelliJ-Tastenzuordnungen verwenden) Ihr erstes Beispiel in Ihr zweites Beispiel. Wenn ich also debuggen möchte, kann ich das leicht genug tun. Und wenn ich vergesse, es zurückzusetzen, fühle ich mich nicht schlecht, weil Strg-RI es wieder zurücksetzt, um das Lesen zu erleichtern.
Im Ernst, verschwenden Sie Ihre Zeit damit, über wichtigere Dinge zu streiten. Wie, wo Sie Ihre führenden Klammern oder Leerzeichen gegen Tabulatoren setzen.
quelle
Persönlich finde ich das erste Beispiel leichter zu lesen. Sie können es weiterhin debuggen, indem Sie einen Haltepunkt in der return-Anweisung setzen und zum Überwachungsfenster hinzufügen
a == 2
oder die Schnellüberwachung verwenden.Aber das ist wirklich eine Frage der persönlichen Präferenz. Beide Versionen sind OK.
quelle
Wenn der Code so leicht lesbar ist wie in Ihrem Beispiel, ist es nichts Falsches, das Ergebnis einer logischen Operation zurückzugeben, wie z
return a == 2
. Wenn der Rückgabewert jedoch eine komplexere Anweisung ist oder wie folgt aussiehtDann sollten Sie Variablen verwenden, um Teile davon zu speichern und die return-Anweisung aus Gründen der Lesbarkeit zu vereinfachen.
quelle
In einem einfachen Beispiel wie diesem ist beides in Ordnung.
Für kompliziertere Beispiele bevorzuge ich den zweiten Weg. Das liegt nur daran, dass es besser lesbar ist und andere den Code wahrscheinlich warten müssen.
quelle
result
, der selbst ein völlig unbeschreiblicher und unbrauchbarer Bezeichner ist.