Roblox(ロブロックス)のゲーム開発のスクリプト言語に使われているLuaスクリプトに関する解説です。
ここではLuaプログラミングの基本となる制御構文について説明しています。
Luaの制御構文
if文
if文は条件式による処理の分岐を行うための構文です。
ある条件式を指定し、それが真か偽かによって異なるブロックの処理を実施します。
書式
もし条件を満たすならブロックを処理する
ある条件を満たすときにブロックを処理する場合、if 条件式 then ブロック endの構文で記述できます。この場合、条件が満たされなければ何も処理されません。
if 条件式 then
ブロック
end
もし条件を満たすならブロック1を処理し、そうでなければブロック2を処理する
ある条件を満たす場合と、そうでない場合の2通りの処理を分岐させたい場合、if 条件式 then ブロック1 else ブロック2 endの構文で記述できます。この場合、ブロック1もしくはブロック2の処理のいずれかが必ず処理されます。
if 条件式 then
ブロック1
else
ブロック2
end
複数の条件のいずれかを処理する
elseifを使用することで、条件を変えて複数のブロックへの処理の分岐を行うこともできます。elseif 条件式 then ブロックの構文は複数回記述することができます。
if 条件式1 then
ブロック1
elseif 条件式2 then
ブロック2
elseif 条件式3 then
ブロック3
else
ブロック4
end
for文
for文は、設定した回数を繰り返しループし、反復処理を行うための構文です。
while文と似た繰り返し処理ですが、for文では繰り返しごとに制御変数の値の自動的な加算や、処理するデータ要素の値の生成が自動的に行われます。
Luaにおけるfor文には2通りの書式があります。
制御変数による繰り返し
ある変数を指定し、その値が条件を満たすまで処理を繰り返します。
書式
for 名前 = 開始値, 終了値 (,加算値) do ブロック end
名前で指定された変数などが開始値で始まり、終了値を超えるまでブロックに記述された処理が繰り返し行われます。ブロックの処理が1度終わると変数に数値が1加算され、最初の処理に戻ります。
local count = 5
local x = 0
for i = 1, count do
x = x + 1
end
また、加算値を指定することで、反復時に加える値を変更することができます。この値が指定されていない場合は1が使われます。
なお、forのループ変数(名前)はループ本体のローカル変数となり、for文の外からは参照できません。ループ処理の終了後にその値を利用するにはループ内で他の変数に値を保管しておく必要があります。
local count = 5
local n
for i = 1, count do
print(i.."番目をチェックしています") --参照できる
if myArray[i] == "ぴよぴよ" then
n = i
break
end
end
if n < 5 then
print(i.."番目に見つかりました") --参照できない(エラー)
print(n.."番目に見つかりました") --参照できる
else
print(count.."回探しても見つからなかったので諦めました")
end
データの各要素に対する繰り返し
table型の配列に含まれる値に対する処理など、指定したリストとなる対象の各要素に対して処理を繰り返します。
この構文は「汎用for文(generic for statement)」と呼ばれています。
local members = {"ほげほげ", "ふがふが", "ぴよぴよ"}
for member in members do
print("こんにちは"..member.."さん")
end
while文
while文は、ある条件を満たすまでブロックを繰り返しループし、反復処理を行うための構文です。
for文と似た繰り返し処理ですが、制御変数の自動的な変更などは行われず、単純に評価を満たすまで処理がループします。
書式
repeat文
repeat文は、ある条件を満たすまでブロックを繰り返しループし、反復処理を行うための構文です。
for文と似た繰り返し処理ですが、制御変数の自動的な変更などは行われず、単純に評価を満たすまで処理がループします。
書式
repeat
ブロック
until 条件式
whileとの使い分けがのポイントとして、repeat文ではブロック内部で宣言したローカル変数を条件式から参照できます。
goto文
break文
break文は、ループ処理を終了(中断)するための構文です。
ループ内のブロックにbreakを記述することで、それを囲んでいる最も内側のループの処理を終了します。
return文
return文は、関数(無名関数なども含む)から値を返す(戻り値を渡す)ための構文です。
ブロックの最後の文にのみ記述することができ、戻り値を指定することで呼び出し元にその値を渡して処理を継続することができます。
書式
return 戻り値

