W jakimś kodzie, który teraz piszę, mam coś takiego:
if (uncommon_condition) {
do_something_simple();
} else {
do();
something();
long();
and();
complicated();
}
Część mnie myśli: „W porządku, w jaki jest napisany. Proste sprawy powinny iść na pierwszym miejscu, a bardziej skomplikowane sprawy powinny iść dalej”. Ale inna część mówi: „Nie! else
Kod powinien przejść poniżej if
, ponieważ if
służy do obsługi nietypowych przypadków i else
do obsługi wszystkich innych przypadków”. Które jest poprawne lub preferowane?
coding-style
GODŁO
źródło
źródło
Odpowiedzi:
Porządkuj według prawdopodobieństwa wykonania. Najpowszechniejsze, najprawdopodobniej itd. Warunki powinny być pierwsze.
„Trudnością w radzeniu sobie z nimi” powinna zajmować się struktura kodu, abstrakcja itp. W przykładzie blok else mógłby zostać przekształcony w pojedyncze wywołanie metody. Chcesz, aby twoje
if
klauzule były na tym samym abstrakcyjnym poziomie.źródło
not
. Osobiście koncentrowałbym się na unikaniunot
warunków. Udowodniono, że powodują więcej obciążenia poznawczego do zrozumienia niż „pozytywne” warunki i są szkodliwe dla czytelności / zrozumiałości kodu. Zwykle używam ich tylko w oświadczeniach ochronnych.doesNotAllowxxFiles = false
. Wystarczająco źle, ale zrób toif(! doesNotAllowxxFiles)
Spróbuj poprawić czytelność. Jednym ze sposobów jest umieszczenie dłuższego bloku kodu w innej części.
jest bardziej czytelny niż
źródło
Żadnej ustalonej reguły jako takiej nie słyszałem o użyciu, ale postępuję w ten sposób
Ale jeśli oba mają tę samą funkcję z różnymi właściwościami, lepiej najpierw wybrać nietypowe niż zwykle, aby można było zapisać jedną instrukcję.
Dla powyższego kodu kod zestawu będzie mniej więcej taki:
Jeśli warunek w środku jest prawdą, wówczas przepływ wynosi 1-> 2 (4 intruzów)
JEŻELI warunek w środku, jeśli jest fałszywy, wówczas przepływ wynosi 1-> 3 (3 intruzji)
Lepiej więc umieścić nietypowe lub rzadko występujące zdarzenia w części lub normalnym stanie w innym, abyśmy mogli zapisać jedną instrukcję za każdym razem ;-)
źródło
Przekonałem się, że dokładnie przeciwny wzorzec prowadzi do łatwiejszego odczytu kodu i zmniejsza lub eliminuje zagnieżdżone instrukcje if. Nazywam to wzorcem „rękawicy”. (W opowiadaniu historii rękawica byłaby serią wyzwań, które należy spełnić przed ukończeniem ostatecznego zadania.) Najpierw zajmując się przypadkami krawędziowymi , pozwalasz, aby główna część kodu była czysta i zwięzła:
źródło
Dla mnie chodzi bardziej o warunki niż o złożoność wykonywanego kodu. Musisz uporządkować warunki, aby najpierw uwięzić nietypowe, a potem bardziej powszechne. Ponadto, jeśli kod else jest naprawdę długi i skomplikowany, prawdopodobnie stworzyłbym do tego napis, aby uwidocznić część warunkową dla czytelnika.
źródło
Nie mam ustalonej reguły, ale generalnie ją przestrzegam - najpierw zastanów się, gdzie jest pominięty wzorzec projektowy, który to uwzględni. Jeśli nie, piszę to, aby warunek w if był jak najbardziej zrozumiały. To znaczy, unikając podwójnych negatywów i tym podobnych.
źródło
Jeśli chodzi o takie scenariusze, nie ma na to reguły kciuka. Ale możliwe, że możemy wykonać zapis dodatniego lub najbardziej prawdopodobnego kodu w bloku if i pominąć w bloku else lub przypadkach domyślnych.
źródło