CL 程式或程序中的 IF 指令

If (IF) 指令用來陳述條件,如果為 true ,則在程式或程序中指定要執行的陳述式或陳述式群組。

Else (ELSE) 指令可以與 IF 指令搭配使用,以指定在 IF 指令所表示的條件為 false 時要執行的陳述式或陳述式群組。

指令包括已測試的表示式 (true 或 false) ,以及指定表示式為 true 時要採取的動作的 THEN 參數。 IF 指令的格式如下:


IF COND(logical-expression) THEN(CL-command)

COND 參數上的邏輯表示式可以是單一邏輯變數或常數,或者它必須說明兩個以上運算元之間的關係; 然後會將表示式評估為 true 或 false。

如果邏輯表示式所說明的條件評估為 true ,則程式或程序會在 THEN 參數上處理 CL 指令。 這可以是單一指令或指令群組。 如果條件不是 true ,程式或程序會執行下一個循序指令。

COND 和 THEN 都是指令上的關鍵字,位置登錄可以省略它們。 下列是此指令的語法正確用法:


IF COND(&RESP=1) THEN(CALL CUS210)
IF (&A *EQ &B) THEN(GOTO LABEL)
IF (&A=&B) GOTO LABEL

Blanks are required between the command name (IF) and the keyword (COND) or value (&A). 如果指定的話,關鍵字與含括該值的左括弧之間不允許空白。

下列範例是關於使用 IF 指令進行條件式處理。 根據 IF 指令中邏輯表示式的評估,以不同方式處理分支。 Assume, for instance, that at the start of the following code, the value of &A is 2 and the value of &C is 4.


       IF (&A=2) THEN(GOTO FINAL)
       IF (&A=3) THEN(CHGVAR &C 5)
       .
       .
       .
FINAL: IF (&C=5) CALL PROGA
       ENDPGM

在此情況下,程式或程序會在分支至 FINAL 之前先處理第一個 IF 指令,並跳過中間程式碼。 它不會回到第二個 IF 指令。 在 FINAL ,因為 &C=5 的測試失敗,所以不會呼叫 PROGA。 然後,程式或程序會處理下一個指令 ENDPGM ,該指令會發出程式或程序結束的信號,並將控制權傳回給呼叫程式或程序。

如果使用相同的程式碼,變數的起始值會不同,則處理邏輯會不同。 For instance, if at the beginning of this code the value of &A is 3 and the value of &C is 4, the first IF statement is evaluated as false. 程式或程序不處理 GOTO FINAL 指令,而是忽略第一個 IF 陳述式並移至下一個 IF 陳述式。 The second IF statement is evaluated as true, and the value of &C is changed to 5. 後續陳述式 (未顯示在這裡) 也會連續處理。 當處理程序達到最後一個 IF 陳述式時,條件 &C=5 會評估為 true ,並呼叫 PROGA。

一系列連續 IF 陳述式會獨立執行。 例如:


      PGM /*  IFFY  */
      DCL &A..
      DCL &B..
      DCL &C..
      DCL &D..
      DCL &AREA *CHAR LEN(5) VALUE(YESNO)
      DCL &RESP..
      IF (&A=&B) THEN(GOTO END)   /*  IF #1  */
      IF (&C=&D) THEN(CALL PGMA)   /*  IF #2  */
      IF (&RESP=1) THEN(CHGVAR &C 2)  /*  IF #3  */
      IF (%SUBSTRING(&AREA 1 3) *EQ YES) THEN(CALL PGMB)  /*  IF #4  */
      CHGVAR &B &C
      .
      .
      .
END:  ENDPGM

If, in this example, &A is not equal to &B, the next statement is run. If &C is equal to &D, PGMA is called. 當 PGMA 傳回時,會考量第三個 IF 陳述式,依此類推。 內嵌指令是完全含括在另一個指令的參數中的指令。

在下列範例中,內嵌了 Change Variable (CHGVAR) 指令和 DO 指令:


IF (&A *EQ &B) THEN(CHGVAR &A (&A+1))
 
 
IF (&B *EQ &C) THEN(DO)
                     .
                     .
                     .
                     ENDDO