(Szukałem "else if range", ale nie znalazłem żadnych odpowiedzi na moje pytanie).Czy wykroczenie w instrukcjach if-then-else jest szkodliwe dla jawnie określających zakresy?
Podczas korzystania jeżeli .. elseif .. jeszcze wybrać co robić w oparciu o zmienną czym w pewnych (wzajemnie się wykluczają) waha się, lubię określić zakresy wyraźnie:
int num = 55;
String message;
if (num >= 20) {
// update message variable
message = "Bigger or equal to than 20";
}
else if (10 <= num && num < 20) {
// update message variable
}
else if (0 <= num && num < 10) {
// update message variable
}
else if (num < 0) {
// update message variable
}
System.out.println(message);
ale wszystkie podręczniki i notatki wykładowe widzę napisać taki przykład tak:
int num = 55;
String message;
if (num >= 20) {
// update message variable
message = "Bigger or equal to than 20";
}
else if (num >= 10) {
// update message variable
}
else if (num >= 0) {
// update message variable
}
else {
// update message variable
}
System.out.println(message);
rozumiem dlaczego oni upewnij się, aby użyć innego na końcu (czyli aby zapobiec kompilatora Javy od myślenia, że zmienna jak wiadomo nie może uzyskać zainicjowany, jeśli zmienna była prymitywna), ale biorąc pod uwagę to wszystko podręczniki i notatki z wykładów pokazują inny styl, czy są jakieś problemy spowodowane wyraźnym zapisaniem zakresów dla wszystkich innych warunków, tak jak lubię?
nie zgadzam się z części refactoring: Pierwsza wersja jest również bardzo podatne na refactoring błędów, trzeba upewnić się, że górna granica każdego zakresu jest dokładnie dolna granica następnego. –
Myślę, że obawy podniesione w [odpowiedź Andy'ego Thomasa] (http://stackoverflow.com/a/40183548/5221149) są bardziej realistycznym problemem niż ktoś zmieniający kolejność instrukcji if-elseif-elseif. Wszystko na tyle głupi, aby zmienić konstrukcję, nie zdając sobie sprawy, że "inny" zależy od tego, czy "powinien" zostać zwolniony. – Andreas