Considere os dois snippets a seguir, com colchetes:
switch (var) {
case FOO: {
x = x + 1;
break;
}
case BAR: {
y = y + 1;
break;
}
}
Sem colchetes:
switch (var) {
case FOO:
x = x + 1;
break;
case BAR:
y = y + 1;
break;
}
Eu sei que, no snippet com colchetes, um novo escopo é criado colocando cada caso entre colchetes. No entanto, se cada caso não precisar do novo escopo (ou seja, nenhum nome de variável está sendo reutilizado), há algum tipo de penalidade de desempenho por usar as chaves com um caso?
fonte
Como sabemos, chaves para casos de switch não são necessárias. O uso de casos de colchetes pode causar confusão sobre o escopo de um caso.
Uma chave de abertura é geralmente associada a algo significativo como o início de uma função ou início de um loop ou início de declaração de classe ou início de inicialização de array, etc ... Sabemos que, um caso quebras de bloco de switch quando encontra uma quebra declaração. Assim, o uso de colchetes parece sugerir a ideia de um escopo diferente para o caso para um leitor ignorante. Portanto, é melhor evitar o uso de chaves para melhorar a legibilidade da programação.
ou seja, quando eu tenho algo como,
switch(i) { case 1 : { //do something } System.out.println("Hello from 1"); case 2: .... }
"Hello from 1" é impresso. Mas o uso de chaves pode sugerir a um leitor ignorante que o caso termina com '}', já sabendo o que as chaves geralmente significam no caso de loops, métodos etc.
Como temos instruções jump-to-label em 'C', o controle apenas muda para case e continua sua execução. Então, com esse entendimento, é apenas uma prática RUIM usar chaves ao escrever casos para switch.
Tecnicamente falando, você pode cercar qualquer bloco de seu código com um par adicional de chaves quando usado com sintaxe válida. Usar chaves no switch parece tão ruim, pelo menos para mim, pois parece dar uma sensação diferente como eu disse acima.
Minha sugestão: apenas evite usar chaves circundantes para casos de switch.
fonte
Com aparelho.
Há tantas coisas que podem dar errado com as declarações switch que tento evitá-las sempre que posso, ou seja,
O uso de chaves é uma maneira de evitar o compartilhamento intencional e acidental de variáveis entre as declarações de caso
fonte
...case 1: int a = 10; break; case 2: int a = 11; break; ...
não compila. (testado com Oracle JDK 8)Esta questão provavelmente será encerrada como "argumentativa" (BRACE WAR!), Mas que diabos. Na verdade, gosto do aparelho depois dos casos. Para mim, isso faz com que a sintaxe feia do switch pareça mais com o resto das construções da linguagem. (Não há penalidade pelo uso de colchetes neste "caso")
fonte
Você diz que as chaves podem ser omitidas porque nenhum nome de variável está sendo reutilizado. Ao reutilizar nomes de variáveis, suponho que você queira declarar uma nova variável do mesmo tipo.
As chaves são realmente mais úteis para garantir que você não reutilize a mesma variável em diferentes
case
s por engano. Eles não declaram nenhuma variável hoje, mas alguém as adicionará amanhã e sem as chaves o código está sujeito a erros.fonte
Eu não usaria aparelho para trocar casos.
A instrução switch parece bastante barroca já sem chaves.
Os casos de troca devem ser muito curtos. Quando você precisa declarar variáveis, é um sinal de que você está fazendo isso errado.
Agora vamos manter algum código C legado que permite trocar casos de mais de 500 linhas ...
fonte
Nunca pensei nisso antes. Nunca precisei dos colchetes em uma cláusula case, então não posso realmente ver por que você precisaria deles. Pessoalmente, não acredito na ideia de "Será mais fácil de manter", isso é uma besteira, será mais fácil de manter se o código fizer sentido e estiver documentado.
Sem colchetes ... menos sintaxe é mais
fonte