Rexx - Segnali

In Rexx, l'istruzione di segnale viene utilizzata generalmente per due scopi, che sono:

  • Uno è trasferire il controllo a un'altra parte del programma. Normalmente è come l'etichetta di riferimento che viene utilizzata in altri linguaggi di programmazione.

  • L'altro è andare a una specifica etichetta trap.

Se il comando del segnale viene utilizzato in uno dei seguenti comandi di istruzione, le strutture di controllo in sospeso verranno automaticamente disattivate.

  • se ... allora ... altro ...

  • fare ... finire

  • do i = 1 to n ... end [e simili cicli do]

  • selezionare quando ... poi ... ... ecc. altrimenti ... fine

La sintassi generale dell'istruzione signal è mostrata come segue:

Sintassi

signal labelName  
   
signal [ VALUE ] labelExpression

Diamo un'occhiata a un esempio di come utilizzare la dichiarazione di segnale.

Esempio

/* 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'

L'output del programma di cui sopra sarà come mostrato di seguito.

Produzione

This is an incorrect number.

Se si modifica il valore della variabile n in un numero intero come mostrato nel programma seguente:

/* 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 '

Otterrai il seguente output:

This is a whole number

Si può anche trasferire al valore dell'etichetta come mostrato nel seguente programma:

/* 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

L'output del programma sopra sarà mostrato come segue:

This is the number 1

Attivazione / disattivazione trasferimento etichetta trap

Come accennato in precedenza, l'istruzione del segnale può essere utilizzata anche per trasferire il controllo a un'etichetta trap.

La sintassi generale del trasferimento dell'etichetta Trap è fornita come segue:

Sintassi

signal ON conditionName [ NAME Label ] 
  
signal OFF conditionName

Dove,

  • conditionName - Questa è la condizione per la quale il segnale deve essere attivato o disattivato.

  • Label - L'etichetta opzionale alla quale deviare il programma.

Vediamo un esempio di utilizzo di un trasferimento di etichette trap.

Esempio

/* 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'

Nell'esempio precedente, per prima cosa attiviamo i segnali di errore. Aggiungiamo quindi una dichiarazione che risulterà in un errore. Abbiamo quindi l'etichetta di trap di errore per visualizzare un messaggio di errore personalizzato.

L'output del programma di cui sopra sarà il seguente:

An error has occurred.