Euforia - declarações de mudança

o switchinstrução é usada para executar um conjunto específico de instruções, dependendo do valor de uma expressão. Muitas vezes, substitui um conjunto deif…elsif declarações dando a você mais controle e legibilidade de seu programa

Sintaxe

A sintaxe da instrução switch simples é a seguinte -

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

O <val> em um caso deve ser um átomo, string literal, constante ou enum. Vários valores para um único caso podem ser especificados separando os valores por vírgulas. Por padrão, o controle flui para o final do bloco de comutação quando o próximo caso é encontrado.

Exemplo

#!/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

Isso produz o seguinte resultado -

Well done!

A mudança ... com declaração fallthru

o case declaração de um switché executado quando corresponde ao valor de expressão fornecido e, por padrão, sai. Por padrão, o controle flui para o final do bloco de comutação quando o próximo caso é encontrado.

O padrão para um bloco de switch específico pode ser alterado para que o controle passe para a próxima instrução executável sempre que um novo caso for encontrado usando with fallthru na instrução switch -

Sintaxe

A sintaxe do switch simples ... com a instrução fallthru é a seguinte -

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

Exemplo

#!/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

Isso produz o seguinte resultado -

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

Você pode usar break declaração para sair de um ponto dentro de uma declaração switch como segue−

#!/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

Isso produz o seguinte resultado -

Well done!

A instrução switch .... label

o switch declaração pode ter um opcional labelpara nomear o bloco de switch. Esse nome pode ser usado em instruções break de switch aninhadas para sair de um switch delimitador em vez de apenas o switch proprietário.

Um rótulo de switch é usado apenas para nomear o bloco e os nomes de rótulo devem ser strings constantes entre aspas duplas com uma ou várias palavras. A palavra-chave do rótulo diferencia maiúsculas de minúsculas e deve ser escrita comolabel.

Sintaxe

A sintaxe da instrução switch ... label simples é a seguinte -

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

Exemplo

#!/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

Isso produz o seguinte resultado -

Well done!
Lower scale!

Note- Se você não estiver usando uma instrução with fallthru , não precisará usar um rótulo porque a instrução switch sairia automaticamente.