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.