数値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 dateforによる合計の計算
数値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フィードバックを取得できます。ローカル設定は不要です。