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 戻り値