Cicli e strutture di controllo in CLP

Da IBM i V5R3 sono stati introdotti nei CLP i comandi per gestire i cicli e le strutture di selezione.

Cicli iterativi

DOFOR: ciclo iterativo per un numero specifico di passi

DCL VAR(&INT) TYPE(*INT) LEN(2)
DCL VAR(&START) TYPE(*INT) LEN(2)
DCL VAR(&END) TYPE(*INT) LEN(2)
DCL VAR(&STEP) TYPE(*INT) LEN(2)
:
CHGVAR VAR(&START) VALUE(100)
CHGVAR VAR(&END) VALUE(0)
CHGVAR VAR(&STEP) VALUE(-1)
:
DOFOR VAR(&INT) FROM(&START) TO(&END) BY(&STEP)
: (group of CL commands)
ENDDO

Altri cicli

DOWHILE: ciclo iterativo in base a condizione. La condizione viene verificata all’inizio del ciclo, quindi se è falsa il ciclo non verrà mai eseguito.
DOUNTIL: ciclo iterativo in base a condizione. La condizione viene verificata alla fine del ciclo, quindi se il ciclo verrà eseguito almeno 1 volta
LEAVE: esce immediatamente dal ciclo e passa il controllo all’istruzione immediatamente successiva al corrispondente ENDDO
ITERATE: riprende l’esecuzione del ciclo al passo successivo (ovvero passa il controllo al corrispondente ENDDO)

Struttura di selezione

SELECT: apre una struttura di selezione. Le condizioni specificate dai successivi comandi WHEN vengono valutate in ordine. La prima condizione vera viene eseguita. Se nessuna condizione è vera viene eseguito il codice del comando OTHERWISE se presente.
WHEN
OTHERWISE
ENDSELECT: chiude una struttura di selezione

DCL VAR(&INT) TYPE(*INT) LEN(4)
:
SELECT
WHEN COND(&INT *LT 0) THEN(DO)
: (group of CL commands)
ENDDO
WHEN COND(&INT *EQ 0) /* Do nothing when zero */
OTHERWISE CMD(CHGVAR &INT (&INT - 1)
ENDSELECT