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