Un procedure puede devolver o no un valor. El código que se presenta posteriormente fue tomado de este link:
Independientemente de la función de esta programación, cabe destacar algunos aspectos.
1.-Se declara El Procedure MOVER en La hoja ‘D’, ademas se especifica que va a devolver un valor alfabético de 30 posiciones. Este PR le indica al compilador que se está declarando el prototipo del procedure.
Un prototipo debe tener igual definición que el PI (Procedure Interfase) definido en el procedure. (Ver punto 4 mas adelante).
Esta definición debe ser especificada en cada programa que quiera utilizar el procedure.
Esta declaración al principio del programa le permite al compilador validar contra el Procedure Interfase. En este caso la declaración sería:
DMOVER PR 30A
DCHAR30 30A VALUE
2.-Luego del Final del programa se declara El Procedure identificando un P seguida el nombre del Procedure.
3.-Se declara con la letra ‘B’ el principio del Procedure.
4.-En el PI, (Procedure Interfase) se define la longitud y el tipo del valor que va a devolver el Procedure.
Viene a ser como el *Entry del Procedure
5.-La variable local CHAR30B contiene el valor que va a devolver el Procedure.
6.-Para devolver el valor de CHAR30B se coloca el comando RETURN seguido de la variable contentiva del valor a ser retornado al programa principal.
7.-La Letra E al final del código en una linea tipo ‘P’ marca el fin del Procedure.
8.-La palabra VALUE utilizada indica que el valor de la variable del cuerpo principal del programa es transferido a una variable local del Procedure. Los cambios que realice el procedure a esta variable no alteran el valor de la variable el programa principal.
Cuando se especifica Reference, todo cambio realizado en el Procedure altera el contenido de la variable en el programa principal. Es decir, se trata de la misma zona de memoria (como si fuera una variable global).
9.-¿Como llamamos a un Procedure sin éste no devuelve ningún valor? Con CALLP podemos llamar al Procedure cuando no devuelve ningún valor.
DMOVER PR 30A
DCHAR30 30A VALUE
*---------------------------------------------------------------
* MAIN - Main Code
*---------------------------------------------------------------
C EVAL CHAR30 = 'ABCD'
C IF MOVER(CHAR30) = 'ABCD’ß------------
C
* whatever
C ENDIF
C SETON LR
*---------------------------------------------------------------
PMOVER B
DMOVER PI 30A
DCHAR30B 30A VALUE
DWRKFLD30A S 30 INZ(*BLANKS)
DLEN S 2 0
C EVAL LEN = %LEN(%TRIM(CHAR30))
C EVAL %SUBST(WRKFLD30A:31-LEN:LEN) =
C %TRIM(CHAR30)
C CLEAR CHAR30B
C EVAL CHAR30B = WRKFLD30A
C RETURN CHAR30B
P E
Autor: Ing. Liliana Suárez.
Si te pareció interesante el artículo reenvíalo a un amigo, haciendo click en el sobrecito que está al final del artículo. El conocimiento es valioso, compártelo.
Si te pareció interesante el artículo reenvíalo a un amigo, haciendo click en el sobrecito que está al final del artículo. El conocimiento es valioso, compártelo.
No comments:
Post a Comment