RETURN (Return to Caller)

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 .

Las acciones que se producen como resultado de la operación RETURN difieren en función de si la operación está en un procedimiento o subprocedimiento cycle-main . Cuando se devuelve un procedimiento cycle-main , se produce lo siguiente:
  1. 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.)
  2. 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.)
  3. 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.

Figura 1. Ejemplos de la operación RETURN
      * 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