La sintaxis típica para una declaración de cambio es:
switch(expression) { case one: // do something... break; case two: // do something else... break; case three: case four: // do something special break; default: // if nothing matches... break; }Esta sintaxis se parece mucho a Python (especialmente los dos puntos y la forma en que la gente la sangra), contrariamente a la sintaxis general de lenguajes como JavaScript, Java o C, donde se usan llaves para la mayoría de las declaraciones. ¿Hay alguna razón específica?
Esperaría que se pareciera más a:
switch(expression) { case (one) { // do something... break; } case (two) { // do something else... break; } case (three) case (four) { // do something special break; } default { // if nothing matches... break; } }Creo que el ejemplo que acabo de proporcionar parece una declaración if-else if-else, pero ¿no debería una declaración de cambio coincidir con el estilo de sintaxis?
Las sentencias case en realidad se tratan como etiquetas en C, similares a las que usa goto . Es difícil responder por qué fue diseñado así e implica buscar en varias publicaciones antiguas de Dennis Ritchie.
Más importante para el día de hoy, puede usar el switch con llaves e incluso se considera una buena práctica. Esto es C válido (y C++):
switch(expression) { case one: { // do something... break; } case two: { // do something else... break; } case three: case four: { // do something special break; } default: { // if nothing matches... break; } }Ahora incluso puede declarar variables locales dentro de cada caso.
En lenguajes de programación tipo C, un identificador con dos puntos que se usa como etiqueta para saltar .
label: // ... goto label; JavaScript no tiene una instrucción goto pero aún tiene etiquetas.
label1: { label2: { console.log('break nested block'); break label1; console.log('unreachable'); } console.log('unreachable'); } En la declaración de switch , cada case tiene una etiqueta para ello. Y la declaración switch tiene su propia lista para esas etiquetas llamada tabla de salto . Cuando el valor dado coincida, salte a esa etiqueta y ejecute cada código siguiente como goto .