Kiedyś szukałem narzędzia do sprawdzania kodu Rubiego i natknąłem się na klejnot pelusa, który wygląda interesująco. Jedną z rzeczy, które sprawdza, jest liczba innych instrukcji użytych w danym pliku Ruby.Dlaczego inne stwierdzenia są zniechęcane w Ruby?
Moje pytanie brzmi, dlaczego te są złe? Rozumiem, że instrukcje if/else
często dodają wiele komplikacji (i uważam, że celem jest zmniejszenie złożoności kodu), ale w jaki sposób można sprawdzać metodę, która sprawdza dwa przypadki bez numeru else
?
Reasumując, mam dwa pytania:
1) Czy istnieje powód inny niż zmniejszenie złożoności kodu, który można by uniknąć else?
2) Oto przykładowa metoda z aplikacji, nad którą pracuję, która używa instrukcji else
. Jak mógłbyś napisać to bez niego? Jedyną opcją, o której mogłem pomyśleć, byłoby potrójne stwierdzenie, ale jest tu dość logiki, że myślę, że potrójne stwierdzenie byłoby bardziej skomplikowane i trudniejsze do odczytania.
def deliver_email_verification_instructions
if Rails.env.test? || Rails.env.development?
deliver_email_verification_instructions!
else
delay.deliver_email_verification_instructions!
end
end
Jeśli napisałeś to z operatorem potrójnego, byłoby:
def deliver_email_verification_instructions
(Rails.env.test? || Rails.env.development?) ? deliver_email_verification_instructions! : delay.deliver_email_verification_instructions!
end
Czy to prawda? Jeśli tak, to czy nie jest to trudniejsze do odczytania? Czy stwierdzenie else
nie pomaga w rozbiciu tego? Czy istnieje inny, lepszy, else
-less sposób, aby napisać to, o czym nie myślę?
Sądzę, że szukam tutaj rozważań stylistycznych.
Dobry write-up na 'else' jako zapachy kodu tutaj: http://solnic.eu/2012/04/11/get-rid-of-that-code-smell-control-couple.html – michaelmichael
To całkiem nieźle, a niektóre z tego, czego szukałem (choć trochę nad głową w częściach). Zadbaj o to, aby opublikować to jako odpowiedź, dopracować i uzyskać dodatkowe punkty karmy, uzupełnić mój przykład lub użyć jednego do zilustrowania? Czy uważasz, że post powinien działać jako odpowiedź? – nickcoxdotme
Nadużywanie jest złe, podobnie jak sztywna presja, której należy unikać. Jest czas i miejsce, a przy poprawnie napisanym kodzie, okazjonalnie jest to właściwe rozwiązanie. Może to być mylące z kodem spaghetti, więc unikaj pisania źle przemyślanego kodu, a reszta powinna zająć się sobą. –