プログラミングをしていると、同じような処理を何度も繰り返したい場面がたくさんあります。BASICには、そんなときに便利な「繰り返し処理」の命令が用意されています。
ここでは、代表的な3つの繰り返し構文、FOR...NEXT
、WHILE...WEND
、DO...LOOP
を見ていきましょう!🚀
1. FOR…NEXT ループ
FOR...NEXT
ループは、決まった回数だけ処理を繰り返したいときによく使われます。
例えば、「1から10まで数える」とか「配列の要素を順番に処理する」といった場合に便利です。
基本的な構文
FOR カウンタ変数 = 初期値 TO 終了値 [STEP 増減値]
' ここに繰り返したい処理を書く
NEXT [カウンタ変数]
- カウンタ変数: ループの回数を数えるための変数です(例:
I
,J
)。 - 初期値: カウンタ変数が最初に持つ値です。
- 終了値: カウンタ変数がこの値を超える(またはSTEPが負の場合は下回る)とループが終了します。
- STEP 増減値 (オプション): ループが1回終わるごとにカウンタ変数に加算(または減算)される値です。省略すると、自動的に
1
になります。 - NEXT [カウンタ変数]: ループの終わりを示します。カウンタ変数は省略可能な場合もありますが、書いた方が分かりやすいでしょう。
使用例 ✨
1から5まで順番に数を表示するプログラムです。
PRINT "FOR...NEXT ループ開始!"
FOR I = 1 TO 5
PRINT "現在のカウント: "; I
NEXT I
PRINT "ループ終了!"
実行すると、次のように表示されます。
FOR...NEXT ループ開始!
現在のカウント: 1
現在のカウント: 2
現在のカウント: 3
現在のカウント: 4
現在のカウント: 5
ループ終了!
STEP
を使うと、カウントの増え方を変えられます。例えば、2ずつ増やす場合はこう書きます。
PRINT "偶数を表示します:"
FOR COUNT = 2 TO 10 STEP 2
PRINT COUNT; " "; ' PRINT文の最後に ; をつけると改行しません
NEXT COUNT
PRINT
実行結果:
偶数を表示します:
2 4 6 8 10
STEP
に負の値を指定すれば、カウントダウンもできます。
PRINT "カウントダウン!"
FOR N = 3 TO 1 STEP -1
PRINT N
NEXT N
PRINT "スタート!"
実行結果:
カウントダウン!
3
2
1
スタート!
FOR...NEXT
ループは、ループに入る前に回数が決まっている処理に適しています。
2. WHILE…WEND ループ
WHILE...WEND
ループは、特定の条件が満たされている間、処理を繰り返したいときに使います。
FOR...NEXT
と違い、繰り返しの回数が事前に決まっていなくても大丈夫です。
基本的な構文
WHILE 条件式
' 条件式が真 (True) の間、繰り返したい処理を書く
WEND
- WHILE 条件式: ここに書かれた条件式を評価し、その結果が真 (True、0以外) である限り、ループ内の処理を実行します。
- WEND: ループの終わりを示します。ここまで来ると、
WHILE
に戻って再び条件式を評価します。
注意点: ループに入る前にまず条件式が評価されます。もし最初から条件が偽 (False、0) であれば、ループ内の処理は一度も実行されません。
使用例 🤔
変数 X
の値が 10 未満の間、その値を表示し続けるプログラムです。
X = 1
PRINT "WHILE...WEND ループ開始!"
WHILE X < 10
PRINT "X の値: "; X
X = X + 2 ' Xの値を2増やす
WEND
PRINT "ループ終了! X は "; X; " になりました。"
実行結果:
WHILE...WEND ループ開始!
X の値: 1
X の値: 3
X の値: 5
X の値: 7
X の値: 9
ループ終了! X は 11 になりました。
この例では、X
が 11 になった時点で WHILE
の条件 X < 10
が偽になるため、ループが終了します。
WHILE
の条件がずっと真のままだと、ループが永遠に終わらない「無限ループ」になってしまいます。ループの中で条件が変わるように、変数の値を変更する処理などを忘れないようにしましょう。
WHILE...WEND
は古い形式のBASICからある構文ですが、より新しいBASIC(FreeBASICなど)では、次に説明する DO...LOOP
の方がより柔軟で推奨されることが多いです。ただし、互換性のために WHILE...WEND
も使えるようになっています。
3. DO…LOOP ループ
DO...LOOP
ループは、WHILE...WEND
よりも柔軟な条件指定ができる繰り返し構文です。
条件をループの最初にチェックするか、最後にチェックするかを選べたり、「~の間繰り返す(WHILE
)」だけでなく「~になるまで繰り返す(UNTIL
)」という指定もできます。
主な構文パターン
DO...LOOP
にはいくつかの書き方があります。
-
最初に条件をチェック (WHILE):
WHILE...WEND
と似ています。条件が真の間、繰り返します。DO WHILE 条件式 ' 条件式が真の間、繰り返す処理 LOOP
-
最初に条件をチェック (UNTIL): 条件が偽の間、繰り返します(条件が真になったらループを抜けます)。
DO UNTIL 条件式 ' 条件式が真になるまで繰り返す処理 LOOP
-
最後に条件をチェック (WHILE): ループ内の処理を最低1回は実行してから、条件をチェックします。条件が真の間、繰り返します。
DO ' 繰り返す処理 (最低1回は実行される) LOOP WHILE 条件式
-
最後に条件をチェック (UNTIL): ループ内の処理を最低1回は実行してから、条件をチェックします。条件が偽の間、繰り返します(条件が真になったらループを抜けます)。
DO ' 繰り返す処理 (最低1回は実行される) LOOP UNTIL 条件式
-
無限ループ (意図的に作る場合): 条件を書かずに
DO...LOOP
だけを書くと、無限ループになります。ループの中からEXIT DO
命令などで脱出する必要があります。DO ' 繰り返す処理 IF 何かの条件 THEN EXIT DO ' ループを抜ける LOOP
使用例 👍
例1: 最後に条件をチェック (UNTIL) – ユーザーが “yes” と入力するまで質問を繰り返します。
INPUT "処理を続けますか? (yes/no)"; answer$
DO
PRINT "「yes」と入力してください!"
INPUT "続けますか? (yes/no)"; answer$
LOOP UNTIL UCASE$(answer$) = "YES" ' UCASE$で大文字小文字を区別しないようにする
PRINT "はい、処理を続けます。"
この例では、INPUT
命令などでユーザーからの入力を受け付け、それが “YES” (大文字小文字問わず) になるまでループが続きます。最初に INPUT
がループの外にあるのは、もし最初から “yes” と入力された場合にループに入らないようにするためですが、DO...LOOP UNTIL
は最低1回は実行されるため、ループの中で尋ねるだけでも良い場合が多いです。
例2: 最初に条件をチェック (WHILE) – WHILE...WEND
と同じような動きです。
Counter = 0
PRINT "DO WHILE...LOOP 開始!"
DO WHILE Counter < 3
PRINT "Counter: "; Counter
Counter = Counter + 1
LOOP
PRINT "ループ終了!"
実行結果:
DO WHILE...LOOP 開始!
Counter: 0
Counter: 1
Counter: 2
ループ終了!
DO...LOOP
は非常に柔軟性が高いループです。条件をチェックするタイミング (DO
の後か LOOP
の後か) や、条件の種類 (WHILE
か UNTIL
か) を使い分けることで、様々な状況に対応できます。
まとめ: どのループを使う? 🤔
ループ構文 | 主な用途 | 特徴 |
---|---|---|
FOR...NEXT |
決まった回数繰り返す | カウンタ変数で回数を制御。STEPで増減値を指定可能。 |
WHILE...WEND |
条件が真の間繰り返す | 最初に条件をチェック。条件を満たさないと一度も実行されない。 (古い形式) |
DO...LOOP |
条件に基づいて繰り返す (柔軟) |
|
基本的には、
- 繰り返す回数が決まっているなら
FOR...NEXT
- 回数は決まっていないが、何らかの条件で繰り返したいなら
DO...LOOP
(または互換性のためにWHILE...WEND
)
を選ぶと良いでしょう。DO...LOOP
は非常に多機能なので、慣れてくると多くの場面で活用できますよ! 🎉
これで繰り返し処理の基本はバッチリです!色々なパターンを試して、ループ処理をマスターしましょう!
コメント