W debacie dotyczącej zmiennych zwracanych niektórzy członkowie zespołu wolą metodę zwracania wyniku bezpośrednio do dzwoniącego, podczas gdy inni wolą zadeklarować zmienną zwrotną, która jest następnie zwracana do dzwoniącego (patrz przykłady kodu poniżej)
Argumentem tego drugiego jest to, że pozwala programistom debugującym kod znaleźć wartość zwracaną przez metodę, zanim powróci ona do programu wywołującego, ułatwiając w ten sposób zrozumienie kodu: Jest to szczególnie prawdziwe, gdy wywołania metod są połączone szeregowo.
Czy istnieją jakieś wytyczne dotyczące tego, który jest najbardziej wydajny i / lub czy istnieją inne powody, dla których powinniśmy stosować jeden styl nad drugim?
Dzięki
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
źródło
źródło
result
przed jego zwróceniem.stloc.0
iwldloc.0
drugiej wersji). Ale myślę, że dzieje się to tylko w trybie debugowania. Poza tym i tak nie jest to tak naprawdę ważne.a = b = c;
ia == b == c
unikałbym pisania czegoś, co wygląda,a = b == c
jeśli możesz. Kiedy po raz pierwszy zobaczyłem taki wiersz kodu, zajęło mi kilka sekund, aby dowiedzieć się, co się dzieje. Ten kod wyróżniał się. Chciałbyma == 3
obrócić nawias , ale StyleCop go nie lubi - dobry powód, aby użyć wersji numer jeden. Coś innego: jest to w zasadzie lambda, na przykłada => (a == 3)
. Po co dodawać wiersz kodu do już rozdętej, trywialnej funkcji?Odpowiedzi:
Ponieważ używam Resharpera z Visual Studio, Ctrl-RV (lub Ctrl-Alt-V, jeśli używasz powiązania klawiszy Resharper / IntelliJ) zamienia twój pierwszy przykład w drugi. Więc kiedy chcę debugować, mogę to zrobić dość łatwo. A jeśli zapomnę go odłożyć, nie będę się czuć źle, ponieważ Ctrl-RI ponownie go odłoży, aby ułatwić czytanie.
Poważnie, marnujcie czas na kłótnie o ważniejsze rzeczy. Na przykład, gdzie umieścić wiodące nawiasy klamrowe lub spacje vs.
źródło
Osobiście uważam, że pierwszy przykład jest łatwiejszy do odczytania. Nadal możesz go debugować, ustawiając punkt przerwania w instrukcji return i dodając
a == 2
do okna zegarka lub używając szybkiego zegarka.Ale tak naprawdę jest to kwestia osobistych preferencji. Obie wersje są OK.
źródło
Gdy kod jest tak czytelny jak twój przykład, nie ma nic złego w zwróceniu wyniku operacji logicznej, takiej jak
return a == 2
. Jeśli jednak zwracana wartość jest bardziej złożoną instrukcją lub wygląda mniej więcej takwtedy będziesz chciał użyć zmiennych do przechowywania części tego pierwszego i uproszczenia instrukcji return ze względu na czytelność.
źródło
W prostym przykładzie, takim jak ten, jedno jest OK.
Dla bardziej skomplikowanych przykładów wolę drugi sposób. Jest tak tylko dlatego, że jest bardziej czytelny, a inni prawdopodobnie będą musieli zachować kod.
źródło
result
, która sama w sobie jest całkowicie nieopisowym i bezużytecznym identyfikatorem.