versión 6.0
La sintaxis de la estructura condicional Case of...Else...End case es la siguiente:
Case of : (Expresion_Booleana) instrucción(es) : (Expresion_Booleana) instrucción(es) . . . : (Expresion_Booleana) instrucción(es) Else instrucción(es) End case
Observe que la parte Else es opcional; puede escribir:
Case of : (Expresion_Booleana) instrucción(es) : (Expresion_Booleana) instrucción(es) . . . : (Expresion_Booleana) instrucción(es) End case
Como en la estructura If...Else...End if, la estructura Case of...Else...End case también le permite a su método elegir entre acciones alternativas. A diferencia de la estructura If...Else...End if, la estructura Case of...Else...End case puede probar un número ilimitado de expresiones booleanas y ejecutar la secuencia de instrucción correspondiente al valor TRUE.
Cada expresión booleana comienza con dos puntos (:). Esta combinación de dos puntos y una expresión booleana se llama caso. Por ejemplo, la siguiente línea es un caso:
: (bValidar=1)
Sólo las instrucciones después del primer caso TRUE (y hasta el siguiente caso) serán ejecutadas. Si ninguno de los casos es TRUE, ninguna de las instrucciones se ejecutará (si no está incluida la parte Else).
Puede incluir una instrucción Else después del último caso. Si todos los casos son FALSE, las instrucciones después de Else serán ejecutadas.
Ejemplo
Este ejemplo prueba una variable numérica y muestra una caja de diálogo de alerta con una palabra en ella:
Case of : (vResult = 1) ` Prueba si el número es 1 ALERT("Uno.") ` Si es 1, muestra una alerta : (vResult = 2) ` Prueba si el número es 2 ALERT("Dos.") ` Si es 2, muestra una alerta : (vResult = 3) ` Prueba si el número es 3 ALERT("Tres.") ` Si es 3, muestra una alerta Else ` Si no es 1, 2, o 3, muestra una alerta ALERT("No es ni uno, ni dos, ni tres.") End case
Para comparar, esta es la versión con If...Else...End if del mismo método:
If (vResult = 1) ` Prueba si el número es 1 ALERT("Uno.") ` Si es 1, muestra una alerta Else If (vResult = 2) ` Prueba si el número es 2 ALERT("Dos.") ` Si es 2, muestra una alerta Else If (vResult = 3) ` Prueba si el número es 3 ALERT("Tres.") ` Si es 3, muestra una alerta Else ` Si no es 1, 2, o 3, muestra una alerta ALERT("No es ni uno, ni dos, ni tres.") End if End if End if
Recuerde que con una estructura Case of...Else...End case, sólo el primer caso TRUE se ejecuta. Incluso si dos o mas casos son TRUE, sólo las instrucciones después del primer caso TRUE se ejecutarán.
Por lo tanto, cuando quiera implementar pruebas jerárquicas, debe asegurarse de que las instrucciones de condición que están más abajo en el esquema jerárquico aparezcan primero en la secuencia de prueba. Por ejemplo, la prueba de la presencia de la condicion1 cubre la prueba de la presencia de la condicion1&condicion2 y por lo tanto debe estar ubicada al final en la secuencia de prueba. Por ejemplo, el siguiente código nunca verá su última condición detectada:
Case of : (vResult = 1) ... `instrucción(es) : ((vResult = 1) & (vCondicion#2)) `este caso nunca será detectado ... `instrucción(es) End case .
En el código anterior, la presencia de la segunda condición no se detecta ya que la prueba "vResult=1" desvía el código anter de realizar más pruebas. Para que el código funcione correctamente, puede escribirlo de la siguiente manera:
Case of : ((vResult = 1) & (vCondicion#2)) `este caso será detectado primero ... `instrucción(es) : (vResult = 1) ... `instrucción(es) End case .
Igualmente, si quiere implementar pruebas jerárquicas, podría considerar utilizar código jerárquico.
Consejo: La bifurcación puede realizarse sin instrucciones a ejecutar en un caso u otro. Cuando desarrolla un algoritmo o una aplicación especializada, nada evita que escriba:
Case of : (Expresion_Booleana) : (Expresion_Booleana) . . . : (Expresion_Booleana) instrucción(es) Else instrucción(es) End case
o:
Case of : (Expresion_Booleana) : (Expresion_Booleana) instrucción(es) . . . : (Expresion_Booleana) instrucción(es) Else End case
o:
Case of Else instrucción(es) End case
Ver también
Condiciones y bucles, For...End for, If...Else...End if, Repeat...Until, While...End while.