LEAVE

目的

この文を直接含む DO グループか、この文でラベルが指定された DO グループ (この文を含む DO グループのいずれか) から制御を移します。

構文

LEAVE [label-reference];

パラメーター

label-reference
この文を含むいずれかの DO グループの先頭にある DO 文のラベルへの参照。ラベル参照は、ラベル定数または添え字付きラベル定数でなければなりません。添え字は整数定数で指定されている必要があります。

説明

LEAVE 文は、この文を直接含む DO グループか、この文でラベルが指定された DO グループ (この文を含む DO グループのいずれか) から制御を移します。

ラベル参照が指定されていない LEAVE 文が実行されると、その LEAVE 文を直接含む DO グループを終了する END 文に続く最初の文に制御が移されます。ラベル参照が指定されている場合は、そのラベルに対応する DO グループの END 文に続く最初の実行可能文に制御が移されます。このように、LEAVE 文は、DO グループの実行を終了するための代替手段として機能します。

ラベル参照が指定されている LEAVE 文では、参照先の DO グループから制御が移される際に、入れ子になった複数の DO グループが終了される可能性があります。

次の例では、LEAVE 文にラベル参照が指定されていません。この場合、IF 文の条件が満たされると、直接 PUT 文に制御が移されます。

DO K = 9 TO 91;
   .
   .
   .
   IF COMMAND = 'QUIT' THEN LEAVE;
   .
   .
   .
END;
PUT LIST ('Job finished');

次の例では、LEAVE 文にラベル参照が指定されています。この場合、LOOP2 を終了する END 文に続く最初の文に制御が移されます。

LOOP2: DO WHILE (MORE);
   .
   .
   .
   LOOP3: DO J = 2 TO 5;
   . 
   .
   .
      IF QUAN(J) > 150 THEN LEAVE LOOP2; 
   END;     /* Loop 3 */
   .  
   .
   .
END;       /* Loop 2 */

制約事項

LEAVE 文は DO グループに含まれていなければならず、参照先の DO 文と同じブロックになければなりません。

LEAVE 文にラベル参照が指定されている場合は、その LEAVE 文を含むいずれかの DO グループの先頭にある DO 文のラベルを参照している必要があります。LEAVE 文は、そのラベル付きの DO 文と同じブロックになければなりません。

ラベル参照にラベル変数や添え字付きラベル定数を指定することはできません。