4-2 For ループの概要

コードを繰り返し実行するには、様々な方法があります。指定した回数だけ実行する場合は、for ループを使用します。ここでは、for ループの記述方法やコードの動きを学びます。カウントダウンのコーディングなど、いくつかの実用的な例を紹介します。

for ループのしくみ

for ループは、実行回数を制御するために、「制御変数」「終了値」「増減値」の 3 つの値を使用します。for ループは、制御変数の値から始まり、終了値を渡すまで、ループ内でコードを実行するたびにカウントアップまたはカウントダウンします。増減値がプラスの場合はカウントアップし、マイナスの場合はカウントダウンします。

for ループのステップ

for ループを理解するには、進行状況のロジックを示すフローチャートを見ると分かるでしょう。

まず、for ループは制御変数を終了値と比較します。

コードを実行すると、増減値が制御変数に加算されます。その後、ループは制御変数をチェックして最初からやり直します。

制御変数が終了値を超えると、ループは停止します。たとえば、ループの終了値が 10 の場合、制御変数が 10 を超えると、for ループは終了します。

カウントダウンをコーディングする

for ループの動作確認をしてみます。10 から始まり、1つずつ減らして、0 までカウントダウンする for ループをコーディングします。ループが実行されるたびに、制御変数内の現在の値が表示されます。

  1. ServerScriptService で、 PracticeLoop という名前の新しいスクリプトを作成します。スクリプトで、キーワード 「for」 を入力するところから始めます。
for
  1. countという名前の制御変数を作成し、開始値を 10 に設定します。変数ですが local は付けません。なお、制御変数は for 内でのみ参照できるものとなります。
for count = 10
  1. 「, 0」と入力して、終了値を 0 に設定します。値を区切るために必ずカンマを入力してください。
for count = 10, 0
  1. さらに「, -1」と入力します。これが増減値となります。ループがそのアクションを終了した後、増減値を制御変数 count に加算します。-1 を加算するということは、「1つ減る」ということを意味します。
for count = 10, 0, -1
  1. for ループを終了するには、 do と入力して Enter を押し、 end を追加します。do と end の間に入力されたコードは、ループが繰り返されるたびに実行されます。
for count = 10, 0, -1 do

end
  1. ループ内で、制御変数 count の値を表示してカウントダウンを作成し、wait 関数で1秒待ちます。
for count = 10, 0, -1 do
    -- forループが進行している現在の番号を表示します
    print(count)
    -- 1秒待ちます
    task.wait(1)
end
  1. プロジェクトを実行し、出力ウィンドウを見て for ループを確認します。

トラブルシューティング

この時点で、ループが意図した通りに機能しない場合は、次のいずれかを試してください。

  • for ループ内の数値を区切る2カンマは2つありますか? カンマが多かったり少なかったりするとループが開始されなくなります。
  • for ループが一気に10から0までの数値を表示する場合は、wait 関数のパラメータが小さすぎるということです。

さまざまな for ループの例

制御変数、終了値、増減値を変更すると、ループの機能が変わります。

下記の例は、開始値、終了値、増減値が異なる for ループです。それらをスクリプトに入れてみて、何が起こるか見てみましょう。

1ずつカウントアップ

for count = 0, 5, 1 do
    print(count)
    task.wait(1)
end

偶数のカウントアップ

for count = 0, 10, 2 do
    print(count)
    task.wait(1)
end

for ループがまったく実行されない場合

以下の例のように、制御変数が終了値を超えてスタートする場合、for ループはまったく実行されません。この場合、for ループはカウントアップし、count が 0 より大きいかどうかをチェックします。for ループが最初のチェックを行うと、10 が 0 より大きいことがわかるため、ループ内は実行されず何も表示されません。

for count = 10, 0, 1 do
    print(count)
    task.wait(1)
end

コメントを残す