Ради моей дискуссии у Bool может быть 2 состояния: True или False. Все остальное не соответствует спецификации языка программирования. Если ваша цепочка инструментов не соответствует ее спецификации, вы будете заняты независимо от того, что вы делаете. Если разработчик создал тип Bool с более чем двумя состояниями, это будет последнее, что он когда-либо сделает на моей базе кода.
Вариант А.
if (var == true) {
...
} else if (var == false) {
...
} else {
...
}
Вариант Б
if (var == true) {
...
} else {
...
}
Я утверждаю, что вариант B является более надежным .....
Любой твик может сказать вам, чтобы обрабатывать неожиданные ошибки. Обычно их легко обнаружить, если подумать о них. Пример, который дал ваш профессор, не может произойти, поэтому это очень плохой пример.
А невозможно протестировать без запутанных жгутов. Если вы не можете создать его, как вы собираетесь его протестировать? Если вы не проверяли код, как вы узнали, что он работает? Если вы не знаете, как это работает, значит, вы не пишете надежное программное обеспечение. Я думаю, что они все еще называют это Catch22 (Отличный фильм, смотрите его когда-нибудь).
Вариант B тривиален для тестирования.
Следующая проблема, задайте вам, профессор, этот вопрос: «Что вы хотите, чтобы я сделал с этим, если логическое значение не является ни истинным, ни ложным?» Это должно привести к очень интересной дискуссии .....
В большинстве случаев дамп ядра является оценочным, в худшем случае он раздражает пользователя или стоит больших денег. Что, если, скажем, модуль представляет собой систему расчета повторного входа космического корабля в реальном времени? Любой ответ, каким бы неточным он ни был, не может быть хуже, чем прерывание, которое убьет пользователей. Так что делать, если вы знаете, что ответ может быть неправильным, пойти на 50/50 или прервать и перейти к 100% -ой ошибке. Если бы я был членом экипажа, я бы взял 50/50.
Вариант А убивает меня Вариант Б дает мне равные шансы на выживание.
Но подождите - это симуляция возвращения космического челнока - тогда что? Прервать, чтобы вы знали об этом. Звучит как хорошая идея? - НЕ - потому что вам нужно проверить с кодом, который вы планируете отправить.
Вариант А лучше для симуляции, но не может быть развернут. Это бесполезно. Вариант B - это развернутый код, поэтому симуляция выполняется так же, как и действующие системы.
Допустим, это была серьезная проблема. Лучшим решением было бы изолировать обработку ошибок от логики приложения.
if (var != true || var != false) {
errorReport("Hell just froze over, var must be true or false")
}
......
if (var == true){
....
} else {
....
}
Дальнейшее чтение - аппарат Therac-25 Xray, сбой Ariane 5 Rocket и другие (в Link много неработающих ссылок, но достаточно информации, чтобы помочь Google)