Bienvenidos a Iseries Venezuela

Las mejores prácticas, recursos, tips, enlaces, videos y artículos para informáticos relacionados con el Iseries y el As/400 lenguajes de programación RPG, ILE RPG y SQL.

The best practices, resources, tips, links, videoes and articles for computer related to the Iseries and the As/400 languages of programming RPG, ILE RPG and SQL.

Wednesday, March 18, 2009

SENTENCIAS DEL FLUJO DE CONTROL EN LOS CLP











Antes del Release V5R3 del Iseries, era imprescindible el uso del GOTO para generar lazos iterativos, bucles o ciclos de repetición. A partir del la versión V5R3 se introducen sentencias que permiten eliminar el uso del GOTO y desarrollar una programación con el uso de sentencias asociadas al concepto de Programación Estructurada. A continuación los nuevos comandos que permiten el Flujo de control en los CLP

Nuevos Comandos CLP


----------------------

DOUNTIL

• Evalúa la condición al final del lazo

Ejemplo:

DOUNTIL (&NUM *EQ 20)

CHGVAR var(&NUM) Value(&NUM + 1)

END


------------------------------------

DOWHILE

• Evalúa la condición al principio del lazo

Ejemplo:

DOWHILE (&NUM *LT 20)

Chgvar var(&Num) Value(&Num + 1)

ENDDO


------------------------------

DOFOR

• Evalúa la condición al principio del lazo
• Var(&num) debe ser tipo *Int (integer)
• From/To pueden ser Integer, expresiones o variables.
• By() debe ser constante integer.


CHGVAR var(&NUMB) Value(0)

DOFOR VAR(&NUM) FROM(9) TO(13) BY(1)

CHGVAR var(&NUMB) Value(&NUMB + &NUM)

ENDDO
/* &NUMB = 55 después de ejecutar el DOFOR cuatro veces.


-------------------


SELECT (with WHEN and OTHERWISE)

• La Sentencia SELECT Inicia un grupo de comandos
• ENDSELECT Finaliza el grupo de comandos
• El grupo debe tener al menos una sentencia WHEN
• La sentencia OTHERWISE es opcional


SELECT

WHEN (&LogicaL)

WHEN (&NUM *GT 0) THEN (CHGVAR
&NUM 0)

WHEN (&NUM *GT 10) (DOUNTIL (&NUM
*EQ 0))

CHGVAR &NUM (&NUM - 1)
ENDDO

OTHERWISE (CHGVAR &LogicaL ’0’)

ENDSELECT


----------------------------------

ITERATE


• A través de etiquetas, permite saltar hacia otros lazos de iteración
• Por omisión permanece en el lazo donde se encuentra
• Pasa el control al final del lazo y verifica la condición.

Se permite dentro de un ciclo de iteración
– DOWHILE
– DOUNTIL
– DOFOR

CICLO1:
CICLO2: DOWHILE &LGL
CICLO3: DOFOR &INT FROM(0) TO(99)

IF (&NUMA *EQ 500) THEN (ITERATE CICLO1)
/* No procesa si NUMA=500 */

IF (&NUMA *GT 500) ITERATE
/* No procesa si NUMA>500 por omisión va a CICLO3*/
ENDDO

IF (&NUMA *LT 500) (ITERATE CICLO1)
/* No procesa si NUMA < 500 */ ENDDO


---------------------------

LEAVE


• A través de etiquetas, permite saltar hacia otros lazos de iteración
• Por omisión permanece en el lazo donde se encuentra
• Pasa el control a la instrucción que esté después del final del lazo

Se permite dentro de un ciclo de iteración
– DOWHILE
– DOUNTIL
– DOFOR

CICLO1:
CICLO2: DOWHILE &LGL
CICLO3: DOFOR &INT FROM(0) TO(99)

IF (&NUMA *EQ 500) THEN (LEAVE CICLO1)
/* No procesa si NUMA=500 */

IF (&NUMA *GT 500) LEAVE
/* No procesa si NUMA>500 salta a: IF Numa *Lt 500*/
ENDDO

IF (&NUMA *LT 500) (LEAVE CICLO1)
/* No procesa si NUMA < 500 */ ENDDO




Si te pareció interesante, reenvialo a un amigo haciendo click en el sobrecito que está al final del artículo. El conocimiento es valioso, compártelo.


Autor:  Ing. Liliana Suárez

No comments: