Które można by uznać za łatwiejsze w utrzymaniu?
if (a == b) c = true; else c = false;
lub
c = (a == b);
Próbowałem szukać w Code Complete, ale nie mogę znaleźć odpowiedzi.
Myślę, że pierwszy jest bardziej czytelny (można dosłownie odczytać go na głos), co, jak sądzę, czyni go łatwiejszym do utrzymania. Drugi z pewnością ma większy sens i redukuje kod, ale nie jestem pewien, czy jest tak łatwy w utrzymaniu dla programistów C # (oczekiwałbym, że zobaczę ten idiom bardziej na przykład w Pythonie).
.net
code-quality
readability
maintainability
clean-code
Bret Walker
źródło
źródło
else c = false
pierwszego lub uczyń zadanie||=
drugim.c = a==b ? true : false;
Odpowiedzi:
Druga opcja jest lepsza.
Istnieje wyraźny powód, aby zachować ostrożność wobec sprytnych skrótów programistycznych, które szkodzą łatwości konserwacji, zaciemniając przeznaczenie kodu. Więc nie winię cię za to, że zadałeś pytanie.
Nie uważam jednak za
c = (a == b);
przykład sprytnej sztuczki. Jest to proste przedstawienie prostej koncepcji. Tak proste, jak to tylko możliwe.Właściwa „utrzymaniu” formatowanie z pierwszego przykładu (bez brakujących zaczepów i jednego wiersza konstruktem, który ja zrobienia rozważyć sprytny skrót) przyniesie ten kod:
Z mojego doświadczenia wynika, że pisanie prostej logiki boolowskiej w taki pełny, podatny na błędy sposób jest oznaką „niepewnego” kodu. Zastanawiałbym się, jak w tej bazie kodu obsługiwana jest bardziej złożona logika.
źródło
Po pierwsze, zdaj sobie sprawę, że twoje dwie formy nie są równoważne.
c
zostanie ustawiony na true, jeślia
jest równyb
, a jeśli nie, jego wartość pozostanie czymkolwiek już jest.c
zostanie ustawiona na true, jeślia
jest równab
, a jeśli nie, zostanie ustawiona na false.Jeśli chcesz ekwiwalent drugiej formy, w stylu pierwszej formy, musisz napisać to w ten sposób:
Teraz jest jasne, który z nich jest bardziej czytelny, łatwiejszy w utrzymaniu i rzadziej wprowadza błędy, jeśli coś zostanie zmienione. Trzymaj się drugiej formy.
źródło
Nie zgadzam się z tym, że twoja pierwsza forma jest bardziej czytelna - z pewnością nie jest idiomatycznym C # mieć dwie instrukcje w jednym wierszu i nie zaleca się posiadania
if
instrukcji bez użycia nawiasów klamrowych.Po drugie, nie rozumiem, w jaki sposób druga forma jest trudniejsza do utrzymania - nie ma nic do utrzymania. To proste stwierdzenie związku między
a
ab
i to nie może być wyrażona dowolny prościej.Innym powodem preferowania drugiej formy jest to, że możesz ją zadeklarować
c
i przypisać w pojedynczej instrukcji, tjModyfikowanie zmiennych może łatwo prowadzić do błędów, więc bym tego unikał. Użycie
if
instrukcji wymaga zadeklarowania zmiennej przed warunkowym, a następnie zmodyfikowania.źródło
Another reason to prefer the second form is that you can declare c and assign it in a single statement
”„łatwiejsze w utrzymaniu” może być bardzo subiektywne.
Zwykle wolę czytelność i celowość niż redukcję kodu. Myślę, że zapisujesz 8 wpisanych znaków, używając zredukowanej formy.
Moim zdaniem obchodzenie języka i kultury wokół języka jest cechą „czytelności”.
Są chwile, w których wydajność może być przyczyną zmniejszenia kodu w celu optymalizacji wynikowego kodu bajtowego, ale należy to zrobić ostrożnie po pewnym profilowaniu.
źródło
Drugi. Ma mniej powtórzeń (suchy) i jest łatwiejszy do zrozumienia tego, co się dzieje, że
c
posiada do wartości, czy niea
i byćb
równe.IMHO, jeszcze lepiej byłoby
Tak jak bym napisał
1 + 2 + 3
zamiast((1 + 2) + 3)
5 + 3 * 7
zamiast(5 + (3 * 7))
Oczywiście i trywialnie niepotrzebny kod nie jest zaletą. Jest zagracony.
źródło
Głosujący, proszę wyjaśnić, co jest nie tak z moją poprawioną odpowiedzią.
Tak,
c = (a == b);
może być trudny do odczytania (jeszcze gorzej, StyleCop narzeka na niepotrzebne nawiasy), ale nadal podoba mi się prostotaa == b
. Dlatego tutaj jest to, co lubię używać, gdy obaa
ib
są takie same:A potem możesz zrobić:
this.c = this.NoPeriod
zamiast:źródło
return this.MyWaveLength = this.HerWaveLength;
czyreturn this.MyWaveLength == this.HerWaveLength;
zamiast tego?c = (a == b);
nie jest podatny na błędy. Pierwsza forma w pierwotnym pytaniu jest bardziej podatna na błędy , o czym świadczy sam OP, który musi edytować swoje pytanie, aby naprawić błędy!