演算子は、操作や条件評価を実行するための記号です。
論理
論理演算子は、与えられた引数のブール値に応じて値を返します。引数がfalseまたはnilでない場合、演算子はそれをtrueとして評価します。他の多くの言語とは異なり、Luauはゼロと空の文字列の両方をtrueと見なします。以下の表は、論理演算子が条件文でどのように動作するかをまとめたものです。
| 演算子 | 説明 |
|---|---|
| and | 両方の条件が真の場合にのみtrueとして評価される |
| or | いずれかの条件が真であればtrueとして評価される |
| not | 条件の逆として評価される |
and
二項演算子andは、二つの引数のいずれかを返します。最初の引数がtrueとして評価される場合、第二の引数を返します。そうでない場合は最初の引数を返します。
print(4 and 5) -- 5print(nil and 12) -- nilprint(false and 12) -- falseprint(false and true) -- falseprint(false and false) -- falseprint(true and false) -- falseprint(true and true) -- true
andを使用して、ifステートメントやwhileループなどの制御構造で複数の条件をテストできます。例えば、次のif‑then文では、二つの条件がどちらも真であるかをテストします。
local pasta = truelocal tomatoSauce = trueif pasta == true and tomatoSauce == true thenprint("スパゲッティの夕食があります")elseprint("何かが足りません...")end-- 出力: スパゲッティの夕食があります
or
二項演算子orは、二つの引数のいずれかを返します。最初の引数がtrueとして評価される場合、最初の引数を返します。そうでない場合は第二の引数を返します。
local y = x or 1print(y) -- 1、xが存在しないためnillocal d = falselocal e = d or 1print(e) -- 1、dはfalseだからprint(4 or 5) -- 4print(nil or 12) -- 12print(false or 12) -- 12print(false or true) -- trueprint(false or false) -- falseprint(true or false) -- trueprint(true or true) -- true
orを使用して、制御構造内で複雑な論理テストを実行できます。例えば、次のif‑then文では、二つの条件が真であるかまたは三つ目の条件が真であるかをテストします。
local pasta = falselocal tomatoSauce = truelocal garlicBread = trueif (pasta == true and tomatoSauce == true) or garlicBread == true thenprint("スパゲッティの夕食またはガーリックブレッドがあります")elseprint("何かが足りません...")end-- 出力: スパゲッティの夕食またはガーリックブレッドがあります
not
単項演算子notは、引数のブール値の逆を返します。引数がfalseまたはnilである場合、trueを返します。そうでない場合はfalseを返します。
print(not true) -- falseprint(not false) -- trueprint(not nil) -- trueprint(not "text") -- falseprint(not 0) -- false
not演算子を使用して、変数がfalseまたはnilの場合に条件やループをトリガーすることができます。
local nilVariable -- 変数は宣言されていますが値がなく、したがってnilですlocal falseVariable = false -- 変数はfalseの値で宣言されていますif not nilVariable thenprint(nilVariable) -- nilは真ではないため、「nil」を出力しますendif not falseVariable thenprint(falseVariable) -- falseは真ではないため、「false」を出力しますend
さらに、not演算子を使用して、全体の複数条件文の逆をテストすることもできます。次のコードサンプルでは、if‑then条件が、三が四より大きくないこと、または五が四より大きくないことが真でないことをテストします。
local three = 3local four = 4local five = 5if not (three > four or five < four) thenprint("三は4より小さく、五は4より大きい。")end-- 出力: 三は4より小さく、五は4より大きい。
関係
関係演算子は、二つのパラメータを比較し、boolean: trueまたはfalseを返します。
| 演算子 | 説明 | 例 | 関連メタメソッド |
|---|---|---|---|
| == | 等しい | 3 == 5 → false | __eq |
| ~= | 等しくない | 3 ~= 5 → true | |
| > | より大きい | 3 > 5 → false | |
| < | より小さい | 3 < 5 → true | __lt |
| >= | 以上 | 3 >= 5 → false | |
| <= | 以下 | 3 <= 5 → true | __le |
算術
Luauは、通常の二項演算子に加えて、累乗、剰余、単項否定をサポートしています。
| 演算子 | 説明 | 例 | 関連メタメソッド |
|---|---|---|---|
| + | 加算 | 1 + 1 = 2 | __add |
| - | 減算 | 1 - 1 = 0 | __sub |
| * | 乗算 | 5 * 5 = 25 | __mul |
| / | 除算 | 10 / 5 = 2 | __div |
| // | 整数除算 | 10 // 4 = 2 | __idiv |
| ^ | 累乗 | 2 ^ 4 = 16 | __pow |
| % | 剰余 | 13 % 7 = 6 | __mod |
| - | 単項否定 | -2 = 0 - 2 | __unm |
複合代入
複合代入演算子を使用して、変数をその変数の現在の値を初めとする操作の結果に等しく設定できます。
複合代入内の操作は一度だけ行われます。例えば、ある式がテーブル内のランダムなインデックスを生成する場合、Luauは操作と代入の両方で同じインデックスを使用します。
次の例では、local x = 3とします。
| 演算子 | 操作 | 例 | xの新しい値 |
|---|---|---|---|
| += | 加算 | x += 2 | 5 |
| -= | 減算 | x -= 2 | 1 |
| *= | 乗算 | x *= 2 | 6 |
| /= | 除算 | x /= 2 | 1.5 |
| //= | 整数除算 | x //= 2 | 1 |
| %= | 剰余 | x %= 2 | 1 |
| ^= | 累乗 | x ^= 2 | 9 |
| ..= | 連結 | x ..= " World!" | "3 World!" |
その他
その他の演算子には、連結と長さが含まれます。
| 演算子 | 説明 | 例 | 関連メタメソッド |
|---|---|---|---|
| .. | 二つの文字列を連結 | print("こんにちは " .. "世界!") | __concat |
| # | テーブルの長さ | もし tableVar = {1, 2, 3} なら、#tableVar == 3。 | __len |