Кто решил (и на основе каких понятий), что 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.