RETURN (Return to Caller)
| Free-Form Syntax | RETURN{(HMR)} expresión |
| Código | Tipo Datos | Factor 2 Ampliado | ||||
|---|---|---|---|---|---|---|
| RETORNO (H M/R) | expresión | |||||
La operación RETURN hace que se devuelva al llamante. Si se devuelve un valor al interlocutor, el valor de retorno se especifica en el operando expresión .
- Se comprueban los indicadores de parada. Si un indicador de parada está encendido, el procedimiento finaliza de forma anómala. (Todos los archivos abiertos se cierran, se establece un código de retorno de error para indicar a la rutina de llamada que el procedimiento ha finalizado de forma anómala y el control vuelve a la rutina de llamada.)
- Si no hay indicadores de parada, se comprueba el indicador LR. Si LR está activado, el programa finaliza normalmente. (Se escriben estructuras de área de datos bloqueadas, matrices y tablas, y se restablecen los indicadores externos.)
- Si no hay ningún indicador de parada activado y LR no está activado, el procedimiento vuelve a la rutina de llamada. Los datos se conservan la próxima vez que se ejecute el procedimiento. Los archivos y las áreas de datos no se graban. Consulte el capítulo sobre la llamada a programas y procedimientos en la publicación Rational® Development Studio for i: ILE RPG Programmer's Guide para obtener información sobre cómo la ejecución en un grupo de activación *NEW afecta a la operación de RETURN.
Cuando se devuelve un subprocedimiento, el valor de retorno, si se especifica en el prototipo del programa o procedimiento llamado, se pasa al llamante. Los archivos automáticos se cierran. Nada más ocurre automáticamente. Todos los archivos y áreas de datos estáticos o globales deben cerrarse manualmente. Puede establecer indicadores como LR, pero esto no hará que se produzca la terminación del programa.
Para obtener información sobre cómo se utilizan los ampliadores de operación H, M y R, consulte Reglas de precisión para operaciones numéricas.
En un subprocedimiento que devuelve un valor, una operación RETURN debe codificarse dentro del subprocedimiento. El valor devuelto real tiene el mismo rol que el lado izquierdo de la expresión EVAL, mientras que el factor ampliado 2 de la operación RETURN tiene el mismo rol que el lado derecho. Sólo se puede devolver una matriz si el prototipo ha definido el valor de retorno como una matriz.
Atención
Si el subprocedimiento devuelve un valor, debe asegurarse de que se realiza una operación RETURN antes de llegar al final del procedimiento. Si el subprocedimiento finaliza sin encontrar una operación RETURN, se indica una excepción al interlocutor.
Sugerencia de rendimiento
La especificación de la palabra clave RTNPARM en el prototipo puede mejorar significativamente el rendimiento para devolver valores grandes. Consulte RTNPARM para obtener más información.
Para obtener más información, consulte Operaciones de llamada.
* This is the prototype for subprocedure RETNONE. Since the
* prototype specification does not have a data type, this
* subprocedure does not return a value.
D RetNone PR
* This is the prototype for subprocedure RETFLD. Since the
* prototype specification has the type 5P 2, this subprocedure
* returns a packed value with 5 digits and 2 decimals.
* The subprocedure has a 5-digit integer parameter, PARM,
* passed by reference.
D RetFld PR 5P 2
D Parm 5I 0
* This is the prototype for subprocedure RETARR. The data
* type entries for the prototype specification show that
* this subprocedure returns a date array with 3 elements.
* The dates are in *YMD/ format.
D RetArr PR D DIM(3) DATFMT(*YMD/)
* This procedure (P) specification indicates the beginning of
* subprocedure RETNONE. The data specification (D) specification
* immediately following is the procedure-interface
* specification for this subprocedure. Note that the
* procedure interface is the same as the prototype except for
* the definition type (PI vs PR).
P RetNone B
D RetNone PI
* RetNone does not return a value, so the RETURN
* operation does not have factor 2 specified.
C RETURN
P RetNone E
* The following 3 specifications contain the beginning of
* the subprocedure RETFLD as well as its procedure interface.
P RetFld B
D RetFld PI 5P 2
D Parm 5I 0
D Fld S 12S 1 INZ(13.8)
* RetFld returns a numeric value. The following RETURN
* operations show returning a literal, an expression and a
* variable. Note that the variable is not exactly the same
* format or length as the actual return value.
C RETURN 7
C RETURN Parm * 15
C RETURN Fld
P RetFld E
* The following 3 specifications contain the beginning of the
* subprocedure RETARR as well as its procedure interface.
P RetArr B
D RetArr PI D DIM(3)
D SmallArr S D DIM(2) DATFMT(*ISO)
D BigArr S D DIM(4) DATFMT(*USA)
* RetArr returns a date array. Note that the date
* format of the value specified on the RETURN operation
* does not have to be the same as the defined return
* value.
* The following RETURN operation specifies a literal.
* The caller receives an array with the value of the
* literal in every element of the array.
C RETURN D'1995-06-27'
* The following return operation returns an array
* with a smaller dimension than the actual return value.
* In this case, the third element would be set to the
* default value for the array.
C RETURN SmallArr
* The following return operation returns an array
* with a larger dimension than the actual return
* value. In this case, the fourth element of BigArr
* would be ignored.
C RETURN BigArr
P RetArr E