Roblox(ロブロックス)のゲーム開発のスクリプト言語に使われているLuaスクリプトに関する解説です。
ここではLuaプログラミングの基本となる変数や式、演算子について説明しています。
変数について
代入、多重代入について
Luaでは代入式のイコール=を使って変数に値を代入することができます。
i = 1
str = 'Foo'
一般的に代入は左辺に変数名があり、右辺に値や式が記述されます、Luaでは左辺、右辺それぞれに複数要素を記述することができます(多重代入)。
要素は,で区切り、左辺と右辺の要素数は同じである必要があります。
i, j, k = 1, 2, 3
一方、C言語などで有効な代入の連接はできません。
--この構文はエラーです。
i = j = k = 1
多重代入の処理は先に式が評価され、そののちに代入が行われます。下記のコードでは、i = 4の代入は全体の式の評価の後に行われるため、a[3] = 20の代入が行われるがa[4]は影響されません。
i = 3
i, a[i] = i+1, 20
以下のようにすることで、変数xとyを入れ替えることができます。
x, y = y, x
ローカル変数の宣言
ローカル変数はlocal文で宣言します。ローカル変数はブロック内のどこでも宣言が可能で、また宣言とともに初期値を代入することもできます。
local name = 'ほげほげ'
初期値の代入がされない場合、すべての変数はnilで初期化されます。
演算子について
算術演算子
| 記号 | 効果 |
| + | 加算 |
| – | 除算 |
| * | 乗算 |
| / | 除算(浮動小数点) |
| // | 切り捨て除算 |
| % | 余り |
| ^ | 累乗 |
| – | 単項マイナス |
ビット演算子
| 記号 | 効果 |
| & | ビットごとの論理積(AND) |
| | | ビットごとの論理和(OR) |
| ~ | ビットごとの排他的論理和(XOR) |
| >> | 右シフト |
| << | 左シフト |
| ~ | 単項ビットごとの否定 |
比較演算子
| 記号 | 効果 |
| == | 等しい |
| ~= | 等しくない |
| < | より小さい(等値を含めない) |
| > | より大きい(等値を含めない) |
| <= | 以下(等値を含める) |
| >= | 以上(等値を含める) |
演算子はtrueかfalseのいずれかを返します。
型が異なる場合はfalseを返します。
table型、userdata型、thread型の場合は参照が比較されます。同一のオブジェクトのみtrueとなります。
NaNはNaN自身を含むあらゆる値とも等しくもなく、大きくもなく、小さくのないものとみなされます。
論理演算子
| 記号 | 効果 |
| and | 双方の条件がいずれも成立すればtrue(AND) |
| or | 双方いずれかの条件が成立すればtrue(OR) |
| not | 双方の条件が異なればtrue(NOT) |
文字列の連結
| 記号 | 効果 |
| .. | 文字列を連結する |
stringもしくはnumber型の場合、文字列として連結されます。

