0Pricing
Lua Academy · レッスン

数値forループ

for i=start,limit,step構文で数値範囲を反復処理します。

「数値forループ」はCoddyKit上の無料Lua Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLua Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Lua Academyコースには全4レッスンが含まれています。

数値forの構文

Luaの数値forループは、for var = start, limit, step doという形式です。stepを省略すると、デフォルトで1になります。ループ変数はループ本体内でローカルとなり、本体内で変更できません。limitとstepは、ループ開始前に1回だけ評価されます。

-- Count 1 to 5
for i = 1, 5 do
  io.write(i .. " ")
end
print()   -- 1 2 3 4 5

-- Count with step 2
for i = 1, 10, 2 do
  io.write(i .. " ")
end
print()   -- 1 3 5 7 9

負のstepによるカウントダウン

値を減らしながら数えるには、負のstepを使います。stepが負の場合、var >= limitである間ループが続きます。負のstepで開始値がすでにlimitより小さい場合、ループ本体は一度も実行されません。

for i = 10, 1, -1 do
  io.write(i .. " ")
end
print()
-- 10 9 8 7 6 5 4 3 2 1

-- Step -2
for i = 10, 0, -2 do
  io.write(i .. " ")
end
print()
-- 10 8 6 4 2 0

ループ変数はローカル

ループ制御変数(i)は自動的にローカルになります。ループ内で値を変更することはできません。Luaはループ変数への代入を無視します。反復回数を別の方法で管理するには、別のローカル変数を使ってください。

for i = 1, 5 do
  -- i is read-only inside the loop
  -- i = i + 10  -- this creates a new global i, not the loop var
  print(i)  -- always 1, 2, 3, 4, 5 as expected
end
-- i is nil here (it was local to the loop)
print(i)  -- nil (or whatever global i was)

配列の反復処理

数値forの最も一般的な用途は、インデックスを使って配列を反復処理することです。limitには#arrを使います。ipairsとは異なり、この形式ではstepの大きさを制御したり、逆順に反復したりできます。また、密な配列ではわずかに高速です。

local fruits = {"apple", "banana", "cherry", "date"}

for i = 1, #fruits do
  print(i, fruits[i])
end
-- 1  apple
-- 2  banana
-- 3  cherry
-- 4  date

forによる合計の計算

数値forループは、配列の要素を順に処理して値を蓄積するのに適しています。パターンは常に同じです。ループ前に結果変数を初期化し、ループ内で更新し、ループ後に使用します。

local values = {10, 20, 30, 40, 50}
local total = 0

for i = 1, #values do
  total = total + values[i]
end

print("Total:", total)    -- 150
print("Count:", #values)  -- 5
print("Mean:", total / #values)  -- 30

入れ子になった数値for

行列の走査、テーブルのテーブル、座標ペアの生成など、2次元の処理には数値forループを2つ入れ子にします。外側のループで行を、内側のループで列を処理し、各反復で1つのセルにアクセスします。

local rows, cols = 3, 4

for r = 1, rows do
  for c = 1, cols do
    io.write(string.format("%2d ", r * c))
  end
  print()
end
--  1  2  3  4
--  2  4  6  8
--  3  6  9 12

浮動小数点数のstep

stepとlimitには浮動小数点数も使えますが、精度誤差が生じる可能性があります。反復回数を正確にしたい場合は、整数を使ってください。浮動小数点数を使う必要がある場合は、ループ回数がfloor((limit - start) / step) + 1で計算されることに注意してください。

-- Float step
for x = 0.0, 1.0, 0.25 do
  io.write(x .. " ")
end
print()
-- 0.0  0.25  0.5  0.75  1.0

-- Prefer integer math when possible
for i = 0, 4 do
  local x = i * 0.25
  io.write(x .. " ")
end

結果テーブルの構築

数値forループは、既存のデータから新しいテーブルを構築する標準的な方法です。空のテーブルを作成し、ループを使ってインデックスごとに値を格納します。

local source = {1, 2, 3, 4, 5}
local squares = {}

for i = 1, #source do
  squares[i] = source[i] ^ 2
end

for i = 1, #squares do
  print(squares[i])   -- 1, 4, 9, 16, 25
end

数値forでのbreak

数値forループは、breakを使って途中で終了できます。実行はendの後にある文へ移ります。これは線形探索に便利です。対象が見つかるまで反復し、見つかったらbreakします。

local data = {5, 3, 8, 1, 9, 2, 7}
local target = 9
local foundAt = nil

for i = 1, #data do
  if data[i] == target then
    foundAt = i
    break
  end
end

if foundAt then
  print("Found at index " .. foundAt)  -- 5
else
  print("Not found")
end

ループ回数の計算

for i = start, limit, stepの反復回数は、max(0, floor((limit - start) / step) + 1)です。これを理解しておくと、1つ多い・少ないといった誤りを防げます。stepが1の場合、回数は単純にlimit - start + 1です。

-- How many iterations?
local count = 0
for i = 1, 10, 3 do
  count = count + 1
end
print(count)   -- 4  (i = 1, 4, 7, 10)

count = 0
for i = 5, 1 do   -- step=1 but start > limit
  count = count + 1
end
print(count)   -- 0 (no iterations)

クイックチェック

for i = 10, 1, -3 doは、どの値を順に処理しますか?

振り返り:数値for

まとめ:

  • for i = start, limit, step do — stepのデフォルト値は1
  • カウントダウンには負のstepを使う
  • ループ変数は自動的にローカルになり、読み取り専用である
  • limitとstepはループ開始前に1回だけ評価される
  • breakで途中終了できる
  • 標準的な用途:結果テーブルの構築、配列の探索、合計の蓄積

よくある質問

「数値forループ」レッスンは無料ですか?

はい。「数値forループ」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Lua Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Lua Academyコースには全4レッスンが含まれています。

「数値forループ」で何を学びますか?

for i=start,limit,step構文で数値範囲を反復処理します。 ブラウザで直接実行するハンズオンコードでLua Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Lua Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのLua Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「数値forループ」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このLua Academyレッスンでコードを書いて実行できますか?

はい。すべてのLua Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. if、elseif、else文
  2. whileループとrepeat-untilループ
  3. 数値forループ
  4. ジェネリックforとbreak
← Lua Academyに戻る