Chi ha deciso (e in base a quali concetti) che la switchcostruzione (in molte lingue) deve usare breakin ogni affermazione?
Perché dobbiamo scrivere qualcosa del genere:
switch(a)
{
case 1:
result = 'one';
break;
case 2:
result = 'two';
break;
default:
result = 'not determined';
break;
}
(notato questo in PHP e JS; probabilmente ci sono molte altre lingue che usano questo)
Se switchè un'alternativa di if, perché non possiamo usare la stessa costruzione di if? Vale a dire:
switch(a)
{
case 1:
{
result = 'one';
}
case 2:
{
result = 'two';
}
default:
{
result = 'not determined';
}
}
Si dice che breakimpedisce l'esecuzione del blocco successivo a quello attuale. Ma qualcuno si imbatte davvero nella situazione, dove c'era bisogno di eseguire il blocco corrente e quelli seguenti? Non l'ho fatto Per me, breakc'è sempre. In ogni blocco. In ogni codice.
case 'a': case 'A': case 'b': case 'B'ma soprattutto perché non posso farlo case in [ 'a', 'A', 'b', 'B' ]. Una domanda leggermente migliore è, nella mia attuale lingua preferita (C #), l'interruzione è obbligatoria e non vi è alcuna caduta implicita; dimenticare breakè un errore di sintassi ...: \
case TOKEN_A: /*set flag*/; case TOKEN_B: /*consume token*/; break; case TOKEN_C: /*...*/
breakè presente ovunque" è una regola significativamente più semplice da implementare rispetto a "Non emettere un salto se fallthroughè presente in un switch".
CASEun'istruzione in modo equivalente a un blocco if / elseif gigante.