Quem decidiu (e com base em quais conceitos) que a switchconstrução (em várias línguas) deve usar breakem cada declaração?
Por que temos que escrever algo como isto:
switch(a)
{
case 1:
result = 'one';
break;
case 2:
result = 'two';
break;
default:
result = 'not determined';
break;
}
(notei isso em PHP e JS; provavelmente existem muitas outras linguagens usando isso)
Se switché uma alternativa de if, por que não podemos usar a mesma construção que para if? Ou seja:
switch(a)
{
case 1:
{
result = 'one';
}
case 2:
{
result = 'two';
}
default:
{
result = 'not determined';
}
}
Diz-se que breakimpede a execução do bloco após o atual. Mas, alguém realmente se depara com a situação, onde havia necessidade de execução do bloco atual e dos seguintes? Eu não fiz. Para mim, breakestá sempre lá. Em cada bloco. Em todo código.
case 'a': case 'A': case 'b': case 'B'mas principalmente porque não posso fazer case in [ 'a', 'A', 'b', 'B' ]. Uma pergunta um pouco melhor é que, no meu idioma preferido atual (C #), a interrupção é obrigatória e não há queda implícita; o esquecimento breaké um erro de sintaxe ...: \
case TOKEN_A: /*set flag*/; case TOKEN_B: /*consume token*/; break; case TOKEN_C: /*...*/
breakestiver presente em qualquer lugar” é uma regra significativamente mais simples de implementar do que “Não emitir um salto se fallthroughestiver presente em um switch”.
CASEinstrução equivalente a um bloco if / elseif gigante.