Interrupción en el caso predeterminado en el interruptor

73

Estoy un poco confundido sobre cuándo o no incluir break después del último caso, a menudo default .

switch (type) {
    case 'product':

        // Do behavior

        break;
    default:

        // Do default behavior

        break; // Is it considered to be needed?
}
El único propósito de

break s es, según tengo entendido, impedir que el código se ejecute en el resto del switch -case.

Entonces, ¿se considera más lógico que break sea el último debido a la consistencia o se salte el hecho de que break no aplique ningún uso funcional? Ambos son lógicos de diferentes maneras en mi opinión.

Hasta cierto punto, esto podría compararse con la finalización de un archivo .php con ?> . Nunca termino con ?> principalmente debido al riesgo de generar espacios en blanco, pero se podría argumentar que sería lógico terminar el archivo con.

    
pregunta Robin Castlin 17.06.2013 - 11:33

3 respuestas

125

break no es técnicamente necesario después de la última alternativa (que, claro, no tiene que ser default : es perfectamente legal, y algunas veces incluso es útil poner primero la rama default ); si su código cae hasta el final de la declaración switch o breaks al final de su última rama tiene el mismo resultado.

Sin embargo, seguiría terminando cada rama, incluida la última, con una declaración return o break , por tres razones:

  1. Refactorabilidad. Si todas sus sucursales terminan con break o return , puede reordenarlas sin cambiar el significado. Esto hace que sea menos probable que tal reordenamiento introduzca una regresión.
  2. Consistencia, y menos sorpresa. La consistencia dice que las ramas deben terminar de manera consistente, a menos que tengan un significado diferente. El Principio de Menos Sorpresa dicta que cosas similares deberían verse similares. Terminar la última rama de un bloque switch exactamente como las anteriores cumple ambas, lo que facilita la lectura y la comprensión. Si omite el break explícito, la última rama será ópticamente diferente (lo que es especialmente importante para el escaneo rápido), y para ver que realmente no es diferente, el lector tiene que descender al nivel de nitidez de leyendo declaraciones individuales.
  3. Protegerse. Si tiene la costumbre de terminar todas sus ramas de switch con un break , pasará a ser automático al cabo de un tiempo, y será menos probable que lo olvide donde importa. Entrenarse para esperar que break al final de cada rama también ayude a detectar las declaraciones break que faltan, lo que es excelente para la depuración y la solución de problemas.
respondido por el tdammers 17.06.2013 - 12:54
11

Dada la ambigüedad que existe alrededor del uso de switch-case en la mayoría de los idiomas, al usarlo sugeriría usar siempre una declaración break , excepto cuando es explícitamente y por diseño no se desea .

En parte, esto se debe a que hace que todas las llamadas case tengan el mismo aspecto, lo que en mi opinión mejoraría la legibilidad. Pero también significa que si alguien (incluso usted) elige insertar un case después del último en una etapa posterior, no necesita preocuparse por verificar el bloqueo anterior, lo que podría ayudar a reducir los errores al agregar un nuevo código.

    
respondido por el user69037 17.06.2013 - 12:34
1

No es necesario break después del caso último . Uso la palabra " último " (no predeterminado ) porque no es necesario que el caso predeterminado sea el último.

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

default:
//do default work
break;

case 3:
//do stuff

}

Y sabemos, un break es necesario entre dos case s consecutivos. A veces, uso if(a!=0) en mi código para que sea más legible cuando otras personas lo refieren. Puedo elegir usar if(a) , eso sería cuestión de mi elección

    
respondido por el Suvarna Pattayil 17.06.2013 - 11:39

Lea otras preguntas en las etiquetas