Interruzione del caso predefinito nel passaggio

73

Sono un po 'perplesso su quando o non includere break dopo l'ultimo caso, spesso default .

switch (type) {
    case 'product':

        // Do behavior

        break;
    default:

        // Do default behavior

        break; // Is it considered to be needed?
}
Il solo scopo di

break s è capire, per impedire al codice di passare attraverso il resto della switch -case.

È quindi considerato più logico avere un break ultimo a causa della consistenza o ignorarlo a causa della break che non applica alcun utilizzo funzionale di sorta? Entrambi sono logici in modi diversi, a mio parere.

Questo potrebbe essere comparato a un certo grado con la fine di un file .php con ?> . Non finisco mai con ?> principalmente a causa del rischio di generare spazi vuoti, ma si potrebbe sostenere che sarebbe la cosa più logica concludere il file con.

    
posta Robin Castlin 17.06.2013 - 11:33
fonte

3 risposte

126

break non è tecnicamente necessario dopo l'ultima alternativa (che, badate bene, non deve essere default : è perfettamente legale, e talvolta utile anche mettere prima il ramo default ); se il tuo codice cade attraverso la fine dell'istruzione switch o breaks out alla fine del suo ultimo ramo ha lo stesso risultato.

Tuttavia, terminerei comunque ogni ramo, incluso l'ultimo, con un'istruzione return o break , per tre motivi:

  1. Refactorability. Se tutti i tuoi rami terminano con break o return , puoi riordinarli senza cambiarne il significato. Ciò rende meno probabile che un tale riordino introduca una regressione.
  2. Consistenza e minima sorpresa. La coerenza dice che i tuoi rami dovrebbero finire in modo coerente, a meno che non abbiano in realtà un significato diverso. Il Principio di Least Surprise stabilisce che le cose simili dovrebbero apparire simili. La fine dell'ultimo ramo di un blocco switch esattamente come i precedenti soddisfa entrambi, il che facilita la lettura e la comprensione. Se si omette l'esplicito break , l'ultimo ramo sarà otticamente diverso (che è particolarmente importante per la scansione veloce), e per vedere che non è davvero diverso, il lettore deve scendere al livello nitido di leggendo le singole dichiarazioni.
  3. Proteggersi. Se hai l'abitudine di terminare tutti i tuoi rami switch con break , dopo un po 'diventerà automatico e avrai meno probabilità di dimenticartene accidentalmente dove è importante. Allenarti ad aspettarti che break alla fine di ogni ramo aiuti anche a rilevare le dichiarazioni di break mancanti, il che è ottimo per il debug e la risoluzione dei problemi.
risposta data 17.06.2013 - 12:54
fonte
11

Data l'ambiguità che esiste intorno all'uso di switch-case nella maggior parte delle lingue, quando lo utilizzi ti suggerisco di utilizzare sempre un'istruzione break , tranne quando è esplicitamente e per impostazione non desiderata .

In parte questo perché rende ogni chiamata di case uguale, il che a mio avviso migliorerebbe la leggibilità. Ma significa anche che qualcuno (anche tu) sceglie di inserire un case dopo l'ultimo in una fase successiva, non è necessario preoccuparsi di controllare il blocco precedente, che potrebbe aiutare a ridurre i bug quando si aggiunge un nuovo codice.

    
risposta data 17.06.2013 - 12:34
fonte
1

Non è necessario break dopo il ultimo caso. Uso la parola " last " (non predefinito ) perché non è necessario il caso predefinito è l'ultimo.

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

default:
//do default work
break;

case 3:
//do stuff

}

E sappiamo che è necessario un break tra due% consecutivi dicase s. A volte, utilizzo if(a!=0) nel mio codice per maggiore leggibilità quando altri fanno riferimento al mio codice. Posso scegliere di usare if(a) , sarebbe una questione di mia scelta

    
risposta data 17.06.2013 - 11:39
fonte

Leggi altre domande sui tag