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.