Break no caso padrão no switch

73

Estou um pouco perplexo quando incluo ou não break após o último caso, geralmente default .

switch (type) {
    case 'product':

        // Do behavior

        break;
    default:

        // Do default behavior

        break; // Is it considered to be needed?
}
O único objetivo do

break é entender que o código não deve ser executado no restante da switch -case.

É então considerado mais lógico ter um break por último devido à consistência ou deixar de tê-lo devido ao break sem aplicação funcional? Ambos são lógicos de diferentes maneiras na minha opinião.

Isso pode até certo ponto ser comparado ao término de um arquivo .php com ?> . Eu nunca termino com ?> principalmente devido ao risco de gerar espaços em branco, mas alguém poderia argumentar que seria a coisa lógica para finalizar o arquivo.

    
por Robin Castlin 17.06.2013 / 11:33
fonte

3 respostas

126

break não é tecnicamente necessário após a última alternativa (o que, lembre-se, não precisa ser default : é perfeitamente legal, e às vezes até útil colocar a ramificação default primeiro); se o seu código cai até o final da instrução switch ou breaks out no final da última ramificação tem o mesmo resultado.

No entanto, eu ainda terminaria cada filial, incluindo a última, com uma declaração return ou break , por três motivos:

  1. Refatoração. Se todas as suas ramificações terminarem com break ou return , você poderá reorganizá-las sem alterar o significado. Isto torna menos provável que tal reordenação introduza uma regressão.
  2. Consistência e menor surpresa. Coerência diz que seus ramos devem terminar de forma consistente, a menos que eles sejam realmente diferentes em significado. O Princípio de Menor Surpresa determina que coisas semelhantes devem ser semelhantes. Terminar a última ramificação de um bloco switch exatamente como os anteriores preenche ambos, o que facilita a leitura e a compreensão. Se você deixar de fora o break explícito, o último ramo será opticamente diferente (o que é especialmente importante para uma rápida varredura), e para que não seja realmente diferente, o leitor tem que descer ao nível básico de ler declarações individuais.
  3. Protegendo-se. Se você criar o hábito de terminar todas as suas ramificações switch com break , ela ficará automática depois de um tempo, e você terá menos chances de acidentalmente esquecê-la quando isso for importante. Treinar-se para esperar que o break no final de cada ramificação também ajude a detectar instruções break ausentes, o que é ótimo para depuração e solução de problemas.
por 17.06.2013 / 12:54
fonte
11

Devido à ambiguidade que existe em torno do uso de switch-case na maioria dos idiomas, ao usá-lo , sugiro sempre usar uma instrução break , exceto quando for explicitamente e por design não desejado .

Em parte, isso ocorre porque faz com que todas as chamadas case pareçam as mesmas, o que, na minha opinião, melhoraria a legibilidade. Mas também significa que se alguém (até você) escolher inserir um case após o último em um estágio posterior, eles não precisarão se preocupar em verificar o bloco anterior, o que poderia ajudar a reduzir erros ao adicionar um novo código.

    
por 17.06.2013 / 12:34
fonte
1

Não há break necessário após o caso último . Eu uso a palavra " last " (não default ) porque não é necessário caso padrão é o último caso.

switch(x)
{
case 1:
//do stuff
break;

default:
//do default work
break;

case 3:
//do stuff

}

E sabemos que é necessário um break entre dois case s consecutivos. Às vezes, eu uso if(a!=0) no meu código para obter mais legibilidade quando outros se referem ao meu código. Eu posso escolher usar if(a) , isso seria uma questão de minha escolha

    
por 17.06.2013 / 11:39
fonte