Kto zdecydował (i na podstawie jakich pojęć), że switchkonstrukcja (w wielu językach) musi być użyta breakw 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 switchjest 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 breakuniemoż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 breakzawsze 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 breakjest błędem składni ...: \
case TOKEN_A: /*set flag*/; case TOKEN_B: /*consume token*/; break; case TOKEN_C: /*...*/
breakjest obecny w dowolnym miejscu” jest znacznie prostszą zasadą do wdrożenia niż „Nie wysyłaj skoku, jeśli fallthroughjest obecny w switch”.
CASEinstrukcję równorzędnie z gigantycznym blokiem if / elseif.