¿Por qué las diferentes cajas no son automáticamente en su propio ámbito? Por ejemplo, si tuviera que hacer esto:¿Por qué los diferentes cuerpos de condición de caso no tienen un alcance diferente?
switch(condition) {
case CONDITION_ONE:
int account = 27373;
case CONDITION_TWO:
// account var not needed here
case CONDITION_THREE:
// account var not needed here
case CONDITION_FOUR:
int account = 90384;
}
el compilador se queja de redefiniciones de variables locales. Entiendo que podría hacer esto:
switch(condition) {
case CONDITION_ONE: {
int account = 27373;
}
case CONDITION_TWO: {
// account var not needed here
}
case CONDITION_THREE: {
// account var not needed here
}
case CONDITION_FOUR: {
int account = 90384;
}
}
colocar un bloqueo alrededor de cada conjunto de sentencias que se ejecutan a poner cada account
variable en su propio ámbito. Pero, ¿por qué el lenguaje no hace esto por mí?
¿Por qué querrías alguna vez declarar una variable local en el cuerpo de CONDITION_ONE
y luego usarla en CONDITION_TWO
? Esto parece una idea TERRIBLE que debe ser explícitamente prohibida, no implícitamente permitida.
** Porque [he] (http: //en.wikipedia.org/wiki/James_Gosling "James Gosling") lo dijo !! ** * (Mi nueva respuesta favorita) * – jjnguy
Esa es una maldita buena pregunta; Me encontré exactamente con la misma frustración ayer. –
Más contundente: ¿Por qué querrías declarar una variable local en un conmutador? Úselos con moderación; ¡poner la lógica de control en un caso es una receta para un programa confuso! –