Euphoria - Declaraciones Switch

los switchdeclaración se utiliza para ejecutar un conjunto específico de declaraciones, dependiendo del valor de una expresión. A menudo reemplaza un conjunto deif…elsif declaraciones que le dan más control y legibilidad de su programa

Sintaxis

La sintaxis de la instrucción switch simple es la siguiente:

switch expression do
   case <val> [, <val-1>....] then
      -- Executes when the expression matches one of the values  
   
   case <val> [, <val-1>....] then
      -- Executes when the expression matches one of the values  
      .....................
   
   case else
      -- Executes when the expression does not matches any case.  
end if

El <val> en un caso debe ser un átomo, una cadena literal, una constante o una enumeración. Se pueden especificar varios valores para un solo caso separando los valores con comas. De forma predeterminada, el control fluye al final del bloque de interruptores cuando se encuentra el siguiente caso.

Ejemplo

#!/home/euphoria-4.0b2/bin/eui

atom marks = 'C'

switch marks do
   case 'A' then
      puts(1, "Excellent!\n" )
   
   case 'B', 'C' then
      puts(1, "Well done!\n" )
   
   case 'D' then
      puts(1, "You passed!\n" )
   
   case 'F' then
      puts(1, "Better try again!\n" )
   
   case else
      puts(1, "Invalid grade!\n" )
end switch

Esto produce el siguiente resultado:

Well done!

El cambio ... con Fallthru Statement

los case declaración de un switchse ejecuta cuando coincide con el valor de expresión dado y sale por defecto. De forma predeterminada, el control fluye al final del bloque de interruptores cuando se encuentra el siguiente caso.

El valor predeterminado para un bloque de interruptores en particular se puede cambiar para que el control pase a la siguiente instrucción ejecutable cada vez que se encuentre un nuevo caso utilizando with fallthru en la declaración de cambio -

Sintaxis

La sintaxis de simple switch ... with fallthru statement es la siguiente:

switch expression with fallthru do
   case <val> [, <val-1>....] then
      -- Executes when the expression matches one of the values  
      break -- optional to come out of the switch from this point.
   
   case <val> [, <val-1>....] then
      -- Executes when the expression matches one of the values  
      break -- Optional to come out of the switch from this point.
      .....................
   
   case else
      -- Executes when the expression does not matches any case.  
      break -- Optional to come out of the switch from this point.
end if

Ejemplo

#!/home/euphoria-4.0b2/bin/eui

atom marks = 'C'

switch marks with fallthru do
   case 'A' then
      puts(1, "Excellent!\n" )
   
   case 'B', 'C' then
      puts(1, "Well done!\n" )
   
   case 'D' then
      puts(1, "You passed!\n" )
   
   case 'F' then
      puts(1, "Better try again!\n" )
   
   case else
      puts(1, "Invalid grade!\n" )
end switch

Esto produce el siguiente resultado:

Well done!
You passed!
Better try again!
Invalid grade!

Puede utilizar opcional break declaración para salir de un punto dentro de una declaración de cambio de la siguiente manera:

#!/home/euphoria-4.0b2/bin/eui

atom marks = 'C'

switch marks with fallthru do
   case 'A' then
      puts(1, "Excellent!\n" )
      break
   
   case 'B', 'C' then
      puts(1, "Well done!\n" )
      break
   
   case 'D' then
      puts(1, "You passed!\n" )
      break
   
   case 'F' then
      puts(1, "Better try again!\n" )
      break
   
   case else
      puts(1, "Invalid grade!\n" )
      break
end switch

Esto produce el siguiente resultado:

Well done!

El interruptor ... etiqueta Declaración

los switch declaración puede tener un opcional labelpara nombrar el bloque de interruptores. Este nombre se puede utilizar en declaraciones de interrupción de conmutador anidadas para romper un conmutador envolvente en lugar de solo el conmutador propietario.

Una etiqueta de interruptor se usa solo para nombrar el bloque y los nombres de etiqueta deben ser cadenas constantes entre comillas dobles que tengan una o varias palabras. La palabra clave de la etiqueta distingue entre mayúsculas y minúsculas y debe escribirse comolabel.

Sintaxis

La sintaxis de la declaración simple switch ... label es la siguiente:

switch expression label "Label Name" do
   case <val> [, <val-1>....] then
      -- Executes when the expression matches one of the values
      break "LEBEL NAME" 
   
   case <val> [, <val-1>....] then
      -- Executes when the expression matches one of the values 
      break "LEBEL NAME"  
      .....................
   
   case else
      -- Executes when the expression does not matches any case.
      break "LEBEL NAME"   
end if

Ejemplo

#!/home/euphoria-4.0b2/bin/eui

atom marks = 'C'
atom scale = 'L'

switch marks label "MARKS" do
   case 'A' then
      puts(1, "Excellent!\n" )
   
   case 'B', 'C' then
      puts(1, "Well done!\n" )
      
      switch scale label "SCALE" do
         case 'U' then
             puts(1, "Upper scale!\n" )
             break "MARKS"
         
         case 'L' then
             puts(1, "Lower scale!\n" )
             break "MARKS"
         
         case else
             puts(1, "Invalid scale!\n" )
             break "MARKS"
      end switch
   
   case 'D' then
      puts(1, "You passed!\n" )
   
   case 'F' then
      puts(1, "Better try again!\n" )
   
   case else
      puts(1, "Invalid grade!\n" )
end switch

Esto produce el siguiente resultado:

Well done!
Lower scale!

Note- Si no está usando una declaración with fallthru , no necesita usar una etiqueta porque la declaración switch saldría automáticamente.