Хто вирішив (і базуючись на яких поняттях), що switchконструкція (багатьма мовами) повинна використовуватись breakу кожному висловлюванні?
Чому ми повинні написати щось подібне:
switch(a)
{
case 1:
result = 'one';
break;
case 2:
result = 'two';
break;
default:
result = 'not determined';
break;
}
(помітили це в PHP та JS; можливо, це багато інших мов, що використовують це)
Якщо switchце альтернатива if, чому ми не можемо використовувати ту саму конструкцію, що і для if? Тобто:
switch(a)
{
case 1:
{
result = 'one';
}
case 2:
{
result = 'two';
}
default:
{
result = 'not determined';
}
}
Кажуть, що breakперешкоджає виконанню блоку, що слідує за поточним. Але чи дійсно хтось стикається з ситуацією, коли була необхідність у виконанні поточного блоку та наступних? Я цього не зробив. Для мене breakзавжди є. У кожному блоці. У кожному коді.
case 'a': case 'A': case 'b': case 'B'але в основному тому, що не можу case in [ 'a', 'A', 'b', 'B' ]. Трохи кращим питанням є те, що в моїй поточній бажаній мові (C #) перерва є обов'язковою , і немає неявного падіння, хоча; забуття break- синтаксична помилка ...: \
case TOKEN_A: /*set flag*/; case TOKEN_B: /*consume token*/; break; case TOKEN_C: /*...*/
breakвін присутній де-небудь" є значно простішим для реалізації правилом, ніж "Не випускати стрибок, якщо fallthroughвін присутній в а switch".
CASEвисловлювання еквівалентно гігантському блоку if / elseif.