Wydaje mi się, że dość często to widzę w moim kodzie i innych. Nie ma w tym nic strasznie złego, ale denerwuje mnie, ponieważ wygląda na to, że można to zrobić lepiej. Przypuszczam, że instrukcja case może mieć trochę więcej sensu, ale często zmienna jest typem, który nie działa dobrze lub wcale z instrukcjami case (w zależności od języka)
If variable == A
if (Flag == true)
doFooA()
else
doFooA2
else if variable == B
if (Flag == true)
doFooB()
else
doFooB2
else if variable == C
if (Flag == true)
doFooC()
else
doFooC2
Wydaje się, że istnieje wiele sposobów na „uwzględnienie” tego, na przykład 2 zestawy if-elses, gdzie jeden zestaw obsługuje, gdy Flag == true.
Czy istnieje „dobry sposób” na uwzględnienie tego, a może kiedy ten algorytm się dzieje, zwykle oznacza to, że robisz coś źle?
code-quality
TruthOf42
źródło
źródło
if (Flag == true)
a nie tylkoIf (Flag)
? Jeśli uważasz, że takIf (Flag == true)
jest lepiej, dlaczego nieif ((Flag == true) == true)
?Odpowiedzi:
Można sobie z tym poradzić z polimorfizmem.
Ilekroć masz kilka sprawdzeń typu if / else na typie czegoś, możesz rozważyć scentralizowanie sprawdzania if / else w metodzie fabrycznej, a następnie wywołać polimorficznie metodę doFoo (). Ale może to być nadmierne zabójstwo dla rozwiązania jednorazowego.
Może mógłbyś stworzyć mapę klucz / wartość, w której kluczem jest var / flag, a wartością jest sama funkcja.
źródło
Wiele zagnieżdżonych ifs zwiększa cykliczną złożoność kodu. Do niedawna posiadanie wielu punktów wyjścia w funkcjach było uważane za źle skonstruowany kod, ale teraz, o ile kod jest prosty i krótki , możesz to zrobić, dzięki czemu kod jest trywialny:
źródło
inną opcją jest połączenie if i przełączanie. Nie jest to lepsze niż technika zagnieżdżenia, ale może zmniejszyć liczbę zduplikowanych testów (jeśli przełącznik zoptymalizuje się do tabeli skoków).
źródło
Cóż, zawsze jest to ...
Ale szczerze mówiąc, myślę, że oryginalny kod nie jest w połowie taki zły.
źródło
Użyj polimorfizmu i
rule
tablicyLub zgodnie z
mike30
sugestią: jeśli warunki reguły mogą z łatwością utworzyć klucz, najlepszym rozwiązaniem jest hasztapa.źródło