IF ステートメント
IF ステートメントは条件を評価し、その評価結果に応じてオブジェクト・プログラム中で処置を選択できるようにします。
| フォーマット |
 .------------------.
V |
>>-IF--条件-1--+------+--+---ステートメント-1-+-+--------------->
'-THEN-' '-NEXT SENTENCE--------'
>--+--------------------------------+--+-------------+---------><
| .------------------. | | (1) |
| V | | '-END-IF------'
'-ELSE--+---ステートメント-2-+-+-'
'-NEXT SENTENCE--------'
|
注:
- END-IF はステートメント-2 または NEXT SENTENCE と共に指定することができます。
- 条件-1
- これは、単純条件にも複合条件にもすることができます (条件式を参照)。
- ステートメント-1、ステートメント-2
- 次のいずれかにできます。
- 命令ステートメント
- 条件ステートメント
- 条件ステートメントが後につく命令ステートメント
- NEXT SENTENCE
- NEXT SENTENCE 句を指定すると、次の分離文字ピリオド の直後にある暗黙の CONTINUE ステートメントに制御が渡されます。
NEXT SENTENCE を END-IF と共に指定すると、END-IF の後のステートメントに制御が
渡されるのではなく、最も近い後続のピリオドの後のステートメントに制御が渡されます。
END-IF 句
この明示的範囲終了符号は、IF ステートメントの範囲を区切るために使用されます。
END-IF 句を使うことによって、
条件付き IF ステートメントを他の条件ステートメント中にネストすることができます。明示的範囲終了符号の詳細については、範囲区切りステートメントを参照してください。
IF ステートメントの範囲は、次のいずれかにより終わらせることができます。
- ネスト構造で同じレベルにある END-IF 句。
- 分離文字ピリオド。
- ネストされている場合は、
より高いネスト・レベルにある IF ステートメントに関連付けられている ELSE 句。
制御の移動
テストされた条件が、真であれば、次に示す処置の 1 つが取られます。
- ステートメント-1 が指定されていれば、ステートメント-1 が実行されます。ステートメント-1 に、
プロシージャー・ブランチ・ステートメントまたは条件ステートメントが入っている場合、そのステートメントの規則に従って制御が移ります。ステートメント-1 にプロシージャー・ブランチ・ステートメントが入っていない場合は、ELSE 句が指定されていても無視され、対応する END-IF 句の後、または分離文字ピリオドの後にある次の実行可能ステートメントに制御が渡されます。
- NEXT SENTENCE が指定されている場合、制御は、
次の分離文字ピリオドの直前にある暗黙の CONTINUE ステートメントに渡されます。
テストされた条件が、偽であれば、次に示す処置の 1 つが取られます。
- ELSE ステートメント-2 が指定されていれば、ステートメント-2 が実行されます。ステートメント-2 に、
プロシージャー・ブランチ・ステートメントまたは条件ステートメントが入っている場合、そのステートメントの規則に従って制御が移ります。ステートメント-2 にプロシージャー・ブランチ・ステートメントまたは条件ステートメントが入っていない場合、制御は、対応する END-IF 句の後または分離文字ピリオドの後にある次の実行可能ステートメントに渡されます。
- ELSE NEXT SENTENCE が指定されている場合は、制御は、
次の分離文字ピリオドの直前にある暗黙の CONTINUE STATEMENT に渡されます。
- ELSE ステートメント-2 も ELSE NEXT SENTENCE も指定していない場合、制御は、対応する END-IF または分離文字ピリオドの後にある、次の実行可能ステートメントに渡されます。
ELSE 句が省略されている場合には、この条件の後に続く、
対応する END-IF 句、または、分離文字ピリオドの前までにあるすべてのステートメントは、ステートメント-1 の一部とみなされます。
ネストされた IF ステートメント
IF ステートメントがステートメント-1 またはステートメント-2 として現れるか、またはステートメント-1 またはステートメント-2 の一部として現れる場合、この IF ステートメントはネストされた IF ステートメントです。
ネストされた IF ステートメントは、左から右に処理される、一致した IF、ELSE、および END-IF の組み合わせとみなされます。したがって、検出される ELSE はすべて、
最も近い場所にある先行の IF (まだ ELSE と一致していないか、または暗黙的あるいは明示的に終了されていないもの) と一致します。検出される END-IF はすべて、暗黙的または明示的に終了されていない、先行の最も近い場所にある IF と一致します。
|