Заради мого обговорення Bool може мати 2 стани, істинне чи помилкове. Все інше - це невідповідність специфікації мови програмування. Якщо ланцюг ваших інструментів не відповідає його характеристикам, ви шлангуєте незалежно від того, чим займаєтесь. Якщо розробник створив тип Bool, який мав більше двох станів, це останнє, що він коли-небудь зробив у моїй кодовій базі.
Варіант А.
if (var == true) {
...
} else if (var == false) {
...
} else {
...
}
Варіант В
if (var == true) {
...
} else {
...
}
Я стверджую, що варіант B більш надійний .....
Будь-який твіт може сказати вам вирішити несподівані помилки. Як правило, їх легко виявити, як тільки ви їх думаєте. Приклад, який подав ваш професор, - це не те, що могло статися, тому це дуже поганий приклад.
A неможливо протестувати без скручених тестових джгутів. Якщо ви не можете створити його, як ви збираєтеся його протестувати? Якщо ви не перевірили код, як ви знаєте, що він працює? Якщо ви не знаєте, що це працює, то ви не пишете надійного програмного забезпечення. Я думаю, що вони все ще називають це Catch22 (Чудовий фільм, дивіться його колись).
Варіант B тривіальний для тестування.
Наступна проблема, задайте професору це запитання: "Що ви хочете, щоб я це зробив, якщо булевий неправдивий і неправдивий?" Це повинно призвести до дуже цікавої дискусії .....
У більшості випадків базовий дамп є доцільним, в гіршому випадку це дратує користувача або коштує великих грошей. Що робити, якщо, скажімо, модуль є системою обчислення реєстру в режимі реального часу Space shuttle? Будь-яка відповідь, незалежно від того, наскільки неточна, не може бути гіршою за переривання вагітності, що знищить користувачів. Що робити, якщо ви знаєте, що відповідь може бути неправильною, перейдіть на 50/50 або перервіть і перейдіть на 100% провал. Якби я був членом екіпажу, я брав би 50/50.
Варіант А вбиває мене Варіант В дає навіть рівний шанс на виживання.
Але зачекайте - це симуляція перенавчання космічного човника - що тоді? Аборт, щоб ти знав про це. Звучить, як гарна ідея? - НЕ - тому що вам потрібно перевірити код, який ви плануєте відправити.
Варіант A кращий для моделювання, але його неможливо розгорнути. Безкорисний варіант B - це розгорнутий код, тому моделювання працює так само, як і живі системи.
Скажімо, це було поважною проблемою. Кращим рішенням було б ізолювати обробку помилок від логіки програми.
if (var != true || var != false) {
errorReport("Hell just froze over, var must be true or false")
}
......
if (var == true){
....
} else {
....
}
Попереднє читання - Therac-25 рентгенівська машина, відмова ракети Ariane 5 та інші (у посилань багато розірваних посилань, але достатньо інформації, що Google допоможе)