Rexx - Sinais
Em Rexx, a instrução de sinal é geralmente usada para dois propósitos, que são -
Uma é transferir o controle para outra parte do programa. Normalmente, é como o rótulo go-to que é usado em outras linguagens de programação.
A outra é ir para um rótulo de armadilha específico.
Se o comando de sinal for usado em qualquer um dos comandos de instrução a seguir, as estruturas de controle pendentes serão automaticamente desativadas.
se ... então ... senão ...
fazer ... acabar
do i = 1 a n ... end [e loops do semelhante]
selecione quando ... então ... ... etc. caso contrário ... fim
A sintaxe geral da declaração de sinal é mostrada a seguir -
Sintaxe
signal labelName
signal [ VALUE ] labelExpression
Vejamos um exemplo de como usar a instrução de sinal.
Exemplo
/* Main program */
n = 100.45
if \ datatype( n, wholenumber ) then
signal msg
say 'This is a whole number'
return 0
msg :
say 'This is an incorrect number'
A saída do programa acima será conforme mostrado abaixo.
Resultado
This is an incorrect number.
Se você alterar o valor da variável n para um número inteiro, conforme mostrado no programa a seguir -
/* Main program */
n = 100
if \ datatype( n, wholenumber ) then
signal msg
say ' This is a whole number '
return 0
msg :
say ' This is an incorrect number '
Você obterá a seguinte saída -
This is a whole number
Também é possível transferir para o valor da etiqueta conforme mostrado no programa a seguir -
/* Main program */
n = 1
if \ datatype( n, wholenumber ) then
signal msg
if n < 1 | n > 3 then
signal msg
signal value n
3 : say 'This is the number 3'
2 : say ' This is the number 2'
1 : say ' This is the number 1'
return n
msg :
say ' This is an incorrect number '
exit 99
A saída do programa acima será mostrada da seguinte forma -
This is the number 1
Ativação / Desativação da Transferência de Rótulo Trap
Como mencionamos anteriormente, a instrução de sinal também pode ser usada para transferir o controle para um rótulo de trap.
A sintaxe geral da transferência do rótulo Trap é fornecida da seguinte forma -
Sintaxe
signal ON conditionName [ NAME Label ]
signal OFF conditionName
Onde,
conditionName - Esta é a condição para a qual o sinal deve ser ligado ou desligado.
Label - A etiqueta opcional para a qual o programa deve ser desviado.
Vejamos um exemplo de como usar uma transferência de rótulo de trap.
Exemplo
/* Main program */
signal on error
signal on failure
signal on syntax
signal on novalue
beep(1)
signal off error
signal off failure
signal off syntax
signal off novalue
exit 0
error: failure: syntax: novalue:
say 'An error has occured'
No exemplo acima, primeiro ligamos os sinais de erro. Em seguida, adicionamos uma instrução que resultará em um erro. Em seguida, temos o rótulo de detecção de erro para exibir uma mensagem de erro personalizada.
A saída do programa acima será a seguinte -
An error has occurred.