Encontré hoy un código de cambio de caja y me sorprendió un poco ver cómo funcionaba. El código fue:¿Funciona el conmutador de casos así?
switch (blah)
{
case a:
break;
case b:
break;
case c:
case d:
case e:
{
/* code here */
}
break;
default :
return;
}
Para mi sorpresa en el escenario en el que la variable fue c
, el camino se fueron dentro del segmento "código aquí". Estoy de acuerdo en que no hay interrupción al final de la parte c
del interruptor de caja, pero me hubiera imaginado que pasaría por default
en su lugar. Cuando aterriza en una línea case blah:
, ¿no comprueba si su valor actual coincide con el caso particular y solo entonces le permiten ingresar al segmento específico? De lo contrario, ¿cuál es el sentido de tener un caso?
: -¡Gracias por la elaborada respuesta! Entiendo cómo funciona. Es solo que es contra lo que el sentido común me dicta. Todavía creo que el comportamiento es contrario a la intuición. Hasta ahora he pensado que esos "casos (bla)" eran como un cheque para asegurar si tu variable realmente es (bla) ... ¡al parecer no funciona así! – Manish
@Manish: Switch a menudo se implementa con un "[branch table] (http://en.wikipedia.org/wiki/Branch_table)", por lo que también podría ayudar a su comprensión. El sentido común no existe en la programación, por cierto. Necesita "sentido del programador" en su lugar :) –
@Manish Ambos comportamientos son deseables, uno puede tener un incumplimiento predeterminado y explícitamente 'break out ', o un break-out explícito y' continue' explícitamente al próximo caso si así lo desea. Desde una perspectiva de sentido común, esta última puede parecer más natural, pero con la implementación en mente, la caída predeterminada es más natural, por lo que se eligió. –