Considere los siguientes dos fragmentos, con llaves:
switch (var) {
case FOO: {
x = x + 1;
break;
}
case BAR: {
y = y + 1;
break;
}
}
Sin tirantes:
switch (var) {
case FOO:
x = x + 1;
break;
case BAR:
y = y + 1;
break;
}
Sé que, en el fragmento con llaves, se crea un nuevo alcance al encerrar cada caso entre llaves. Sin embargo, si cada caso no necesita el nuevo alcance (es decir, no se reutilizan los nombres de las variables), ¿existe algún tipo de penalización de rendimiento por usar las llaves con un caso?
fuente
Como sabemos, los aparatos ortopédicos para las cajas de interruptores no son necesarios. El uso de estuches con frenillos puede causar confusión sobre el alcance de un caso.
Una llave de apertura generalmente se asocia con algo significativo como el comienzo de una función o el comienzo de un bucle o el comienzo de la declaración de clase o el comienzo de la inicialización de la matriz, etc. declaración. Por lo tanto, el uso de llaves parece implicar la idea de un alcance diferente para el caso para un lector ignorante. Por lo tanto, es mejor evitar el uso de llaves en aras de una mejor legibilidad de la programación.
es decir, cuando tengo algo como,
switch(i) { case 1 : { //do something } System.out.println("Hello from 1"); case 2: .... }
Se imprime "Hola desde 1". Pero el uso de llaves puede sugerir a un lector ignorante que el caso termina con '}', sabiendo ya qué significan las llaves en el caso de bucles, métodos, etc.
Como si tuviéramos declaraciones de salto a etiqueta en 'C', el control simplemente cambia a caso y continúa su ejecución. Entonces, con ese entendimiento, es solo una MALA práctica usar llaves al escribir casos para switch.
Técnicamente hablando, puede rodear cualquier bloque de su código con un par adicional de llaves cuando se usa con una sintaxis válida. El uso de llaves en el interruptor se ve tan mal al menos para mí, ya que parece dar una sensación diferente, como dije anteriormente.
Mi sugerencia: simplemente evite usar tirantes circundantes para las cajas de interruptores.
fuente
Con tirantes.
Hay tantas cosas que pueden salir mal con las declaraciones de cambio que trato de evitarlas donde puedo, es decir
El uso de llaves es una forma de evitar el intercambio intencional y accidental de variables entre declaraciones de casos
fuente
...case 1: int a = 10; break; case 2: int a = 11; break; ...
no se compila. (probado con Oracle JDK 8)Esta pregunta probablemente se cerrará como "argumentativa" (¡BRACE WAR!) Pero qué diablos. De hecho, me gustan los frenillos después de los casos. Para mí, hace que la sintaxis del cambio feo se parezca más al resto de las construcciones del lenguaje. (No hay penalización por usar llaves en este "caso")
fuente
Dice que las llaves se pueden omitir porque no se reutilizan nombres de variables. Al reutilizar nombres de variables, supongo que te refieres a declarar una nueva variable del mismo tipo.
Las llaves son en realidad más útiles para garantizar que no termine reutilizando la misma variable en diferentes
case
correos electrónicos por error. No declaran ninguna variable hoy, pero alguien las agregará mañana y, sin las llaves, el código es propenso a errores.fuente
No usaría llaves para las cajas de interruptores.
La declaración del cambio parece bastante barroca ya sin tirantes.
Los casos de interruptores deben ser muy cortos. Cuando necesita declarar variables, es una señal de que lo está haciendo mal.
Ahora vamos a mantener un código C heredado que tiene cajas de cambio de más de 500 líneas ...
fuente
Nunca lo había pensado antes. Nunca necesité las llaves en una cláusula de caso, así que no puedo ver por qué las necesitarías. Personalmente, no opto por la idea de "Será más fácil de mantener", eso es una tontería, será más fácil de mantener si el código tiene sentido y está documentado.
Sin llaves ... menos sintaxis es más
fuente