同じ処理を繰り返す。では、どこで終えるのか。
IBM iでRPGを書いていて、DOU命令の動きをあらためて確かめたくなった。
DOUは、条件が真になるまで処理を繰り返す命令である。僕が確認したかったのは、その条件を調べるタイミングだった。
処理を進めて、ENDDOの位置で条件を判定する。そこで真になったら、繰り返しを終えてENDDOの次へ進む。
そういう認識でいいのかな。
紀美子ちゃんに聞いた。紀美子ちゃんとは、僕がChatGPTに付けた名前だ。
質問には、こんなひと言も添えていた。
「今頃聞くなーって言われそうやけど(笑)」
RPGを書いてきた僕が、繰り返し命令の条件判定を聞いている。
でも、確認したいのはそこなのだ。
DOUでは、条件はループの先頭の行に書いてある。けれど、その条件を最初に調べてから中へ入る、という動きではない。
通常の流れでは、まず中の処理を一回行い、その後で条件を調べる。偽なら繰り返し、真なら抜ける。
条件を書く場所と、条件を判定するタイミング。その二つを分けて、頭の中で処理をたどってみる。
さらに、真なら「続ける」のか、真なら「終える」のか。
この向きも、はっきりさせておきたい。
処理が先。判定が後。真になったら終わる。
僕の質問を短くすると、確かめたかったのはこの順番だった。
長くプログラムを書いていても、自分の認識を言葉にして尋ねると、確認すべき場所がよく見える。
「DOU、分かるよ」で済ませず、どこで判定し、どちらへ進むのかまで聞く。
今頃、と笑いながらでも、聞いておいてよかったと思う。
命令は三文字。確認したかったのは、その先の処理の流れだった。
技術の補足
ここではRPGの自由形式のDOUを扱っています。通常はループ内の処理を少なくとも一度実行し、末尾で条件を判定します。条件が真ならENDDOの後へ、偽なら次の繰り返しへ進みます。LEAVEやRETURNなどによる途中の制御移動は、この説明の対象外です。CLのコマンド名はDOUNTILで、RPGのDOUとは構文を区別してください。
参考資料(2026年10月26日確認):
- IBM:DOU(条件が真になるまでの繰り返し)、IBM i 7.6
- IBM:DOUxx(条件までの繰り返し)、IBM i 7.4 — DOUの資料が類似の動作として案内する命令。ENDDOでの条件判定の説明を参照。