Odkąd pamiętam, unikałem używania instrukcji switch fall-through. Właściwie nie pamiętam, żeby kiedykolwiek wkroczyło do mojej świadomości jako możliwy sposób robienia rzeczy, ponieważ wcześnie wwiercono mi się w głowę, że to nic innego jak błąd w instrukcji przełącznika. Jednak dzisiaj natknąłem się na kod, który używa go zgodnie z projektem, co sprawiło, że od razu zacząłem się zastanawiać, co wszyscy w społeczności myślą o upadku instrukcji switch.
Czy jest to coś, na co język programowania nie powinien wyraźnie zezwalać (tak jak robi to C #, chociaż dostarcza obejścia), czy też jest to cecha dowolnego języka, która jest wystarczająco potężna, aby pozostawić ją w rękach programisty?
Edycja: Nie byłem wystarczająco szczegółowy, co miałem na myśli, mówiąc o upadku. Często używam tego typu:
switch(m_loadAnimSubCt){
case 0:
case 1:
// Do something
break;
case 2:
case 3:
case 4:
// Do something
break;
}
Martwię się jednak o coś takiego.
switch(m_loadAnimSubCt){
case 0:
case 1:
// Do something, but fall through to the other cases
// after doing it.
case 2:
case 3:
case 4:
// Do something else.
break;
}
W ten sposób za każdym razem, gdy wielkość liter wynosi 0, 1, zrobi wszystko w instrukcji switch. Widziałem to zgodnie z projektem i po prostu nie wiem, czy zgadzam się, że instrukcje przełączające powinny być używane w ten sposób. Myślę, że pierwszy przykład kodu jest bardzo przydatny i bezpieczny. Drugi wydaje się trochę niebezpieczny.