● ステートメントリファレンス

for 〜 next

for ループを構成します。

    for 制御用変数の初期値設定 to 終了値

        処理ブロック

    next

「制御用変数の初期値設定」には、ループを制御するための変数と初期値の設定を記述します。これには代入式を使用します。
終了値には、ループが終了する値を計算式で記述します。制御用変数 > 終了値となった時点で、対応する next の次の行に処理を移します。

    for i = 0 to 10

        処理ブロック

    next

この場合、ループを繰り返す毎に i が 0 、1 、2 、… と変化し、10 を超えた時、next の次の行へ移ります。

next は単独で記述します。通常の BASIC のような、制御変数を書く書式ではありませんので、注意してください。

gotoif 〜 then でもループを構成する事はできますが、for 〜 next ではラベルを使用しないループを構成する事ができます。また、ラベルによるループよりも for 〜 next の方が若干高速です。


増分値

制御用変数の増分はデフォルトで 1 になっていますが、step を使用する事で変更する事ができます。

    for 制御用変数の初期値設定 to 終了値 step 増分

        処理ブロック

    next

増分は計算式で記述します。ここで設定した値が、1ループ毎に制御用変数へ加算されます。


次のように、制御用変数を直接変化させる事もできます。この場合、for に変数の計算を行わせないようにするため、step には 0 を指定します。

    for i = 1 to 100 step 0

        処理ブロック

        i = i * 2
    next

step が 0 なので、制御用変数 < 終了値を終了条件にしたい場合は、この方法を使用する事ができません。
その場合は、制御変数の計算に for が行う減算を打ち消すための加算を入れます。

                        値は 0 以外で任意。
                        終了条件を反転させるため、負の値を指定する事
                          ↓
    for i = 64 to 1 step - 

        処理ブロック

        i = i / 2 +  
    next            ↑
                  step に指定した値の正の値を加算する



初期化、比較、加減算のタイミング

次の2つの処理は等価です。

ループ1.

    for i = 0 to 10 step 2

        処理ブロック

    next


ループ2.

    i = 0                            : #  i の初期化
$loop_jmp
    if i <= 10 then $loop_end        : #  終了条件

    処理ブロック

    i = i + 2                        : #  step 2

    goto $loop_jmp                   : #  next

$loop_end


for ループのネスト

for 〜 next は、アプリケーションが決定した限界数まで、入れ子にする事ができます。

    for i = 0 to 10
        for j = 0 to 10
            for k = 0 to 10

                処理ブロック

            next
        next
    next

記述上の注意点

for ループの中に飛び込むジャンプには制約がありますが、ループから抜け出すジャンプには、比較的自由があります。次のように、for ループの入れ子を一気に抜け出す事もできます。

    for i = 0 to 10
        for j = 0 to 10
            for k = 0 to 10


                if ループの終了条件 then $全てのループから抜ける


            next
        next
    next
$全てのループから抜ける

        ・
        ・
        ・