Quem decidiu (e com base em quais conceitos) que a switch
construção (em várias línguas) deve usar break
em 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 break
impede 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, break
está 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: /*...*/
break
estiver presente em qualquer lugar” é uma regra significativamente mais simples de implementar do que “Não emitir um salto se fallthrough
estiver presente em um switch
”.
CASE
instrução equivalente a um bloco if / elseif gigante.