Ze względu na moją dyskusję Bool może mieć 2 stany, Prawda lub Fałsz. Wszystko inne jest niezgodne ze specyfikacją języka programowania. Jeśli Twój łańcuch narzędzi jest niezgodny ze specyfikacją, nie ma znaczenia, co robisz. Jeśli programista stworzył typ Bool, który miał więcej niż 2 stany, jest to ostatnia rzecz, jaką zrobiłby na mojej bazie kodu.
Opcja A.
if (var == true) {
...
} else if (var == false) {
...
} else {
...
}
Opcja B
if (var == true) {
...
} else {
...
}
Twierdzę, że opcja B jest bardziej niezawodna .....
Każdy twit może powiedzieć ci, żebyś obsługiwał nieoczekiwane błędy. Zazwyczaj są one bardzo łatwe do wykrycia, kiedy o nich pomyślisz. Przykład podany przez twojego profesora nie jest czymś, co mogłoby się zdarzyć, więc jest to bardzo słaby przykład.
Niemożliwe jest przetestowanie bez skomplikowanych wiązek testowych. Jeśli nie możesz go utworzyć, jak zamierzasz go przetestować? Jeśli nie przetestowałeś kodu, skąd wiesz, że on działa? Jeśli nie wiesz, że to działa, to nie piszesz solidnego oprogramowania. Myślę, że wciąż nazywają to Catch22 (Świetny film, obejrzyj go kiedyś).
Opcja B jest trywialna do przetestowania.
Następny problem, zadaj profesorowi to pytanie: „Co chcesz, abym to zrobił, jeśli Boolean nie jest ani Prawda, ani Fałsz?” To powinno doprowadzić do bardzo interesującej dyskusji .....
W większości przypadków zrzut rdzenia jest odpowiedni, w najgorszym przypadku drażni użytkownika lub kosztuje dużo pieniędzy. Co jeśli, powiedzmy, moduł jest systemem obliczania ponownych prób w czasie rzeczywistym? Każda odpowiedź, bez względu na to, jak niedokładna, nie może być gorsza niż przerwanie, które zabije użytkowników. Co więc zrobić, jeśli wiesz, że odpowiedź może być zła, wybierz 50/50 lub przerwij i przejdź do 100% awarii. Gdybym był członkiem załogi, wziąłbym 50/50.
Opcja A zabija mnie Opcja B daje mi równą szansę na przeżycie.
Ale poczekaj - to symulacja ponownego wejścia promu kosmicznego - co wtedy? Przerwij, abyś wiedział o tym. Brzmi jak dobry pomysł? - NIE - ponieważ musisz przetestować za pomocą kodu, który planujesz wysłać.
Opcja A jest lepsza do uproszczenia, ale nie można jej wdrożyć. Jest to bezużyteczna opcja B to wdrożony kod, więc symulacja działa tak samo, jak w systemach na żywo.
Powiedzmy, że to był ważny problem. Lepszym rozwiązaniem byłoby odizolowanie obsługi błędów od logiki aplikacji.
if (var != true || var != false) {
errorReport("Hell just froze over, var must be true or false")
}
......
if (var == true){
....
} else {
....
}
Dalsze czytanie - maszyna Therac-25 Xray, awaria rakiety Ariane 5 i inne (Link ma wiele uszkodzonych linków, ale wystarczająca ilość informacji, które pomoże Google)