Roblox(ロブロックス)のゲーム開発のスクリプト言語に使われているLuaスクリプトに関する解説です。
ここではLuaプログラミングの基本となる構文やコメントの記述などについて説明しています。
記述における規約
予約語
以下のワードはLuaスクリプトの構文などに使用するためのワードのため、変数名などに使用することはできません。(アルファベット順)
and、break、do、else、elseif、end、false、for、function、goto、if、in、local、nil、not、or、repeat、return、then、true、until、while
大文字と小文字の区別
Luaスクリプトでは大文字と小文字が区別される。上記のrepeatは予約語のため使用することができませんが、RepeatやREPEATは異なる名前として扱うことができます。
また、_REPEATのように「アンダースコア+大文字で始まる名前」の使用は慣例として避けるよう推奨されます。
記号
以下の記号はLua構文で使用されるトークン(演算子などの字句要素)となっています。
+、-、*、/、%、^、#、&、~、|、<<、>>、//、==、~=、<=、>=、<、>、=、(、)、{、}、[、]、::、;、:、,、.、..、...
Luaの基本構文
コメント
コメントはふたつのハイフン--で記述する。コメントは行末まで有効。コメント内は自由な文字列を記述可能です。
複数行のコメントはハイフン+2重ブラケット(角括弧)--[[]]で記述します。--[[がコメント開始の記述となり、対応する]]までがコメントアウトされます。
慣例として閉じカッコは--]]と記述されることもあります。
サンプルコード:コメント
--これはコメントです。
--[[これもコメントです。]]
--[[
コメントは複数行に
記述することもできます。
--]]
ブロック
順番に実行される構文のひとまとまりをブロックと呼びます。
ブロックを区切るためにdo ... end文を使用することが可能です。doとendの構文そのものに機能はありませんが、do文を使うことで処理の単位や区切りを明示して処理の流れを把握しやすくすることができます。
サンプルコード:do … end
do
if connection then connection:disconnect() end
contextActionService:UnbindAction("Reload")
game.ReplicatedStorage:WaitForChild("ROBLOX_PistolUnequipEvent"):FireServer()
hud.AmmoHud:TweenPosition(UDim2.new(1.5, 0, 0.95, 0), "InOut", "Quad", 0.3, true)
runService:UnbindFromRenderStep("Sights")
userInputService.MouseIconEnabled = true
hud.Crosshair.Visible = false
neck.C0 = oldNeckC0
shoulder.C0 = oldShoulderC0
end
文の区切り/セミコロン
Luaスクリプトは分の区切りにセミコロン;を使うことができるが必須ではありません。セミコロンが記述されていない場合でも構文を自動的に解釈して処理されます。
ただし、関数の呼び出しなどの記述により文法の解釈があいまいになるケースがあります。
a = b + c
(print or io.write)('done')
上記の記述は以下の2通りの解釈が可能。
a = b + c(print or io.write)('done') --関数Cの引数
a = b + c; (print or io.write)('done') --b+cの実施後、無名関数の呼び出し

