Rexx - Señales
En Rexx, la instrucción de señal se usa generalmente para dos propósitos, que son:
Uno es transferir el control a otra parte del programa. Normalmente es como la etiqueta de referencia que se utiliza en otros lenguajes de programación.
La otra es ir a una etiqueta de trampa específica.
Si el comando de señal se utiliza en cualquiera de los siguientes comandos de instrucción, las estructuras de control pendientes se desactivarán automáticamente.
si ... entonces ... si no ...
hacer ... terminar
do i = 1 an ... end [y bucles do similares]
seleccione cuando ... entonces ... ... etc. de lo contrario ... fin
La sintaxis general de la declaración de señal se muestra a continuación:
Sintaxis
signal labelName
signal [ VALUE ] labelExpression
Veamos un ejemplo de cómo usar la declaración de señal.
Ejemplo
/* 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 salida del programa anterior será como se muestra a continuación.
Salida
This is an incorrect number.
Si cambia el valor de la variable n a un número entero como se muestra en el siguiente programa:
/* 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 '
Obtendrá el siguiente resultado:
This is a whole number
También se puede transferir al valor de la etiqueta como se muestra en el siguiente programa:
/* 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 salida del programa anterior se mostrará de la siguiente manera:
This is the number 1
Activación / desactivación de la transferencia de etiquetas de trampa
Como mencionamos anteriormente, la instrucción de señal también se puede usar para transferir el control a una etiqueta de trampa.
La sintaxis general de la transferencia de etiquetas Trap es la siguiente:
Sintaxis
signal ON conditionName [ NAME Label ]
signal OFF conditionName
Dónde,
conditionName - Esta es la condición por la cual la señal debe encenderse o apagarse.
Label - La etiqueta opcional a la que se debe desviar el programa.
Veamos un ejemplo del uso de una transferencia de etiqueta de trampa.
Ejemplo
/* 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'
En el ejemplo anterior, primero activamos las señales de error. Luego agregamos una declaración que resultará en un error. Luego tenemos la etiqueta de captura de error para mostrar un mensaje de error personalizado.
La salida del programa anterior será la siguiente:
An error has occurred.