Está en la página 1de 5

UDO

COMPUTACION IV

PROF. SERGIO GALVN MTZ

La instruccin switch
La instruccin switch (switch-statement) selecciona una lista de instrucciones que se
van a ejecutar que tengan asociada una etiqueta de switch (switch-label) que se
corresponda con el valor de la expresin de switch.
switch-statement:
switch ( expression ) switch-block
switch-block:
{ switch-sectionsopt }
switch-sections:
switch-section
switch-sections switch-section
switch-section:
switch-labels statement-list
switch-labels:
switch-label
switch-labels switch-label
switch-label:
case constant-expression :
default :
Una instruccin switch est formada por la palabra clave switch, seguida de una
expresin entre parntesis (denominada expresin de switch) y de un bloque
switch (switch-block). El bloque-switch consiste en varias o ningunasecciones-deswitch (switch-section), encerradas entre llaves. Cada seccin-de-switch est formada
por una o variasetiquetas-de-switch (switch-label) seguidas de una lista-deinstrucciones (Seccin 8.2.1).
El tipo aplicable en una instruccin switch est establecido por la expresin de switch.
Si el tipo de la expresin de switch
es sbyte, byte, short, ushort, int, uint, long, ulong, char, string o tipoenumerado, se ser el tipo aplicable en la instruccin switch. En caso contrario, debe
existir una conversin implcita definida por el usuario(Seccin 6.4) del tipo de la
expresin de switch a uno de los posibles tipos
aplicables: sbyte, byte, short, ushort, int,uint, long, ulong, char y string. Si no
existe una conversin implcita o existe ms de una, se producir un error en tiempo de
compilacin.
La expresin de constante de cada etiqueta case debe denotar un valor de tipo
convertible implcitamente (Seccin 6.1)al tipo aplicable en la instruccin switch. Si
dos o ms etiquetas case de la misma instruccin switch especifican el mismo valor
constante, se producir un error en tiempo de compilacin.
Puede existir una etiqueta default en una instruccin switch.
Una instruccin switch se ejecuta de la siguiente forma:

Se evala la expresin de switch y se convierte al tipo aplicable.

Si una de las constantes especificadas en una etiqueta case de una


instruccin switch es igual al valor de la expresin de switch, el control se

POR LA CULTURA A LALIBERTAD


3

UDO

COMPUTACION IV

PROF. SERGIO GALVN MTZ

transfiere a la lista de instrucciones que estn a continuacin de dicha


etiquetacase.

Si ninguna de las constantes especificadas en las etiquetas case de una


instruccin switch es igual al valor de la expresin switch y existe una
etiqueta default, el control se transfiere a la lista de instrucciones que
aparece a continuacin de la etiqueta default.

Si ninguna de las constantes especificadas en las etiquetas case de una


instruccin switch es igual al valor de la expresin switch y no existe una
etiqueta default, el control se transfiere al punto final de la instruccinswitch.

Si el punto final de la lista de instrucciones de una seccin de switch es alcanzable, se


producir un error en tiempo de compilacin. Esto se conoce como regla "sin paso
explcito". El ejemplo
switch (i) {
case 0:
CaseZero();
break;
case 1:
CaseOne();
break;
default:
CaseOthers();
break;
}
es vlido porque ninguna seccin de switch tiene un punto final alcanzable. A
diferencia de C y C++, la ejecucin de una seccin switch no permite el "paso
explcito" a la siguiente seccin switch, y el ejemplo
switch (i) {
case 0:
CaseZero();
case 1:
CaseZeroOrOne();
default:
CaseAny();
}
da como resultado un error en tiempo de compilacin. Para ejecutar una seccin de
switch despus de la ejecucin de otra seccin de switch, debe utilizar una
instruccin goto case o goto default explcita:
switch (i) {
case 0:
CaseZero();
goto case 1;
case 1:
CaseZeroOrOne();
goto default;

POR LA CULTURA A LALIBERTAD


3

UDO

COMPUTACION IV

PROF. SERGIO GALVN MTZ

default:
CaseAny();
break;
}
Una seccin-de-switch admite varias etiquetas. El ejemplo
switch (i) {
case 0:
CaseZero();
break;
case 1:
CaseOne();
break;
case 2:
default:
CaseTwo();
break;
}
es vlido. El ejemplo no viola la regla "sin paso explcito" porque las etiquetas case
2: y default: forman parte de la misma seccin switch.
La regla "sin paso explcito" evita una clase de errores comunes que se producen en C
y C++ cuando se omiten involuntariamente instrucciones break. Adems, gracias a
esta regla, las secciones switch de una instruccin switch se pueden reorganizar
arbitrariamente sin afectar al comportamiento de la instruccin. Por ejemplo, las
secciones de la instruccin switch anterior se pueden colocar en orden inverso sin
modificar el comportamiento de la instruccin:
switch (i) {
default:
CaseAny();
break;
case 1:
CaseZeroOrOne();
goto default;
case 0:
CaseZero();
goto case 1;
}
La lista de instrucciones de una seccin de switch termina normalmente con una
instruccin break, goto case o gotodefault, pero tambin se admite cualquier sintaxis
que convierta el punto final de la lista de instrucciones en inalcanzable. Por ejemplo,
una instruccin while controlada mediante la expresin booleana true nunca
alcanzar su punto final. Igualmente, una instruccin throw o return siempre
transfiere el control a otra parte y nunca alcanza su punto final. Por tanto, el siguiente
ejemplo es correcto:
switch (i) {
case 0:
while (true) F();

POR LA CULTURA A LALIBERTAD


3

UDO

COMPUTACION IV

PROF. SERGIO GALVN MTZ

case 1:
throw new ArgumentException();
case 2:
return;
}
El tipo aplicable en una instruccin switch puede ser el tipo string. Por ejemplo:
void DoCommand(string command) {
switch (command.ToLower()) {
case "run":
DoRun();
break;
case "save":
DoSave();
break;
case "quit":
DoQuit();
break;
default:
InvalidCommand(command);
break;
}
}
De la misma forma que los operadores de igualdad (Seccin 7.9.7), la
instruccin switch distingue maysculas de minsculas y ejecutar una determinada
seccin slo si la cadena de expresin de switch coincide exactamente con una
constante de etiqueta case.
Cuando el tipo aplicable en una instruccin switch es string, se admite el
valor null como constante de etiqueta case.
La lista de instrucciones de bloque switch puede contener instrucciones de
declaracin (Seccin 8.5). El mbito de una variable o constante local declarada en un
bloque switch es el propio bloque.
Dentro de un bloque switch, el significado de un nombre utilizado en un contexto de
expresin debe ser siempre el mismo (Seccin 7.5.2.1).
La lista de instrucciones de una seccin de switch determinada es alcanzable si la
instruccin switch es alcanzable y se cumple alguna de las condiciones siguientes:

La expresin de switch no es un valor constante.

La expresin de switch es una constante que coincide con una etiqueta case de
la seccin de switch.

La expresin de switch es una constante que no coincide con ninguna


etiqueta case y la seccin de switch contiene la etiqueta default.

Una instruccin goto case o goto default alcanzable hace referencia a una
etiqueta switch de la seccin.

POR LA CULTURA A LALIBERTAD


3

UDO

COMPUTACION IV

PROF. SERGIO GALVN MTZ

El punto final de una instruccin switch es alcanzable si se cumple al menos una de las
siguientes condiciones:

La instruccin switch contiene una instruccin break alcanzable que provoca la


salida de la instruccin switch.

La instruccin switch es alcanzable, la expresin de switch no es un valor


constante y no existe etiquetadefault.

La instruccin switch es alcanzable, la expresin de switch es una constante


que no coincide con ninguna etiqueta case y no existe etiqueta default.

POR LA CULTURA A LALIBERTAD


3

También podría gustarte