Rexx - Signaux

Dans Rexx, l'instruction de signal est généralement utilisée à deux fins, qui sont -

  • La première consiste à transférer le contrôle vers une autre partie du programme. C'est normalement comme l'étiquette de référence qui est utilisée dans d'autres langages de programmation.

  • L'autre consiste à accéder à une étiquette de piège spécifique.

Si la commande de signal est utilisée dans l'une des commandes d'instruction suivantes, les structures de commande en attente seront automatiquement désactivées.

  • si ... alors ... sinon ...

  • faire ... finir

  • do i = 1 to n ... end [et faire des boucles similaires]

  • sélectionnez quand ... alors ... ... etc. sinon ... fin

La syntaxe générale de l'instruction de signal est indiquée comme suit -

Syntaxe

signal labelName  
   
signal [ VALUE ] labelExpression

Regardons un exemple d'utilisation de l'instruction signal.

Exemple

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

La sortie du programme ci-dessus sera comme indiqué ci-dessous.

Production

This is an incorrect number.

Si vous changez la valeur de la variable n en un nombre entier comme indiqué dans le programme suivant -

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

Vous obtiendrez la sortie suivante -

This is a whole number

On peut également transférer à la valeur de l'étiquette comme indiqué dans le programme suivant -

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

La sortie du programme ci-dessus sera affichée comme suit -

This is the number 1

Activation / désactivation du transfert d'étiquettes de piège

Comme nous l'avons mentionné précédemment, l'instruction de signal peut également être utilisée pour transférer le contrôle vers une étiquette d'interruption.

La syntaxe générale du transfert d'étiquette Trap est donnée comme suit -

Syntaxe

signal ON conditionName [ NAME Label ] 
  
signal OFF conditionName

Où,

  • conditionName - C'est la condition pour laquelle le signal doit être activé ou désactivé.

  • Label - L'étiquette facultative vers laquelle le programme doit être détourné.

Voyons un exemple d'utilisation d'un transfert d'étiquettes d'interruption.

Exemple

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

Dans l'exemple ci-dessus, nous activons d'abord les signaux d'erreur. Nous ajoutons ensuite une instruction qui entraînera une erreur. Nous avons alors l'étiquette de trappe d'erreur pour afficher un message d'erreur personnalisé.

La sortie du programme ci-dessus sera comme indiqué ci-dessous -

An error has occurred.