Kto zdecydował (i na podstawie jakich pojęć), że switch
konstrukcja (w wielu językach) musi być użyta break
w każdym stwierdzeniu?
Dlaczego musimy napisać coś takiego:
switch(a)
{
case 1:
result = 'one';
break;
case 2:
result = 'two';
break;
default:
result = 'not determined';
break;
}
(zauważyłem to w PHP i JS; prawdopodobnie używa wielu innych języków)
Jeśli switch
jest to alternatywa if
, dlaczego nie możemy użyć tej samej konstrukcji, co dla if
? To znaczy:
switch(a)
{
case 1:
{
result = 'one';
}
case 2:
{
result = 'two';
}
default:
{
result = 'not determined';
}
}
Mówi się, że break
uniemożliwia wykonanie bloku następującego po bieżącym. Ale czy ktoś naprawdę wpadł na sytuację, w której istniała potrzeba wykonania bieżącego bloku i kolejnych? Ja nie. Dla mnie break
zawsze tam jest. W każdym bloku. W każdym kodzie.
case 'a': case 'A': case 'b': case 'B'
ale głównie dlatego, że nie mogę case in [ 'a', 'A', 'b', 'B' ]
. Nieco lepszym pytaniem jest, w moim obecnym preferowanym języku (C #), przerwa jest obowiązkowa i nie ma żadnego ukrytego upadku; zapominanie break
jest błędem składni ...: \
case TOKEN_A: /*set flag*/; case TOKEN_B: /*consume token*/; break; case TOKEN_C: /*...*/
break
jest obecny w dowolnym miejscu” jest znacznie prostszą zasadą do wdrożenia niż „Nie wysyłaj skoku, jeśli fallthrough
jest obecny w switch
”.
CASE
instrukcję równorzędnie z gigantycznym blokiem if / elseif.