¿Por qué necesitamos una pausa después de las declaraciones de casos?

Resuelto unj2 asked hace 14 años • 16 respuestas

¿Por qué el compilador no coloca automáticamente declaraciones de interrupción después de cada bloque de código en el cambio? ¿Es por razones históricas? ¿Cuándo le gustaría que se ejecutaran varios bloques de código?

unj2 avatar Apr 26 '10 05:04 unj2
Aceptado

A veces es útil tener varios casos asociados con el mismo bloque de código, como

case 'A':
case 'B':
case 'C':
    doSomething();
    break;

case 'D':
case 'E':
    doSomethingElse();
    break;

etc. Sólo un ejemplo.

En mi experiencia, generalmente es un mal estilo "fallar" y ejecutar múltiples bloques de código para un caso, pero puede tener usos en algunas situaciones.

WildCrustacean avatar Apr 25 '2010 23:04 WildCrustacean

Históricamente , se debe a que caseesencialmente definía un punto de destinolabel de una llamada. La declaración de cambio y sus casos asociados en realidad solo representan una rama multidireccional con múltiples puntos de entrada potenciales a un flujo de código.goto

Dicho todo esto, se ha observado un número casi infinito de veces que breakcasi siempre es el comportamiento predeterminado que preferirías tener al final de cada caso.

Bob Cross avatar Apr 25 '2010 23:04 Bob Cross

Java proviene de C y esa es la sintaxis de C.

Hay ocasiones en las que desea que varias declaraciones de casos tengan solo una ruta de ejecución. A continuación se muestra un ejemplo que le indicará cuántos días tiene un mes.

class SwitchDemo2 {
    public static void main(String[] args) {

        int month = 2;
        int year = 2000;
        int numDays = 0;

        switch (month) {
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            case 12:
                numDays = 31;
                break;
            case 4:
            case 6:
            case 9:
            case 11:
                numDays = 30;
                break;
            case 2:
                if ( ((year % 4 == 0) && !(year % 100 == 0))
                     || (year % 400 == 0) )
                    numDays = 29;
                else
                    numDays = 28;
                break;
            default:
                System.out.println("Invalid month.");
                break;
        }
        System.out.println("Number of Days = " + numDays);
    }
}
Romain Hippeau avatar Apr 25 '2010 23:04 Romain Hippeau