Lua 演算子

演算子は、インタプリタに特定の数学的または論理的演算を実行するよう指示する特殊な記号です。Luaには次の種類の演算子があります:

  • 算術演算子
  • 関係演算子
  • 論理演算子
  • その他の演算子

算術演算子

次の表は、Lua言語でよく使われる算術演算子を示しています。Aの値を10、Bの値を20とします:

演算子説明例
+加算A + B の出力結果は 30
-減算A - B の出力結果は -10
*乗算A * B の出力結果は 200
/除算B / A の出力結果は 2
%剰余B % A の出力結果は 0
^べき乗A^2 の出力結果は 100
-負号-A の出力結果は -10
//整除演算子 (>=lua5.3) 5//2出力結果は 2

例

次の例を通じて、算術演算子の応用をより深く理解できます。

例

a = 21
b = 10
c = a + b
print("Line 1 - c の値は ", c )
c = a - b
print("Line 2 - c の値は ", c )
c = a * b
print("Line 3 - c の値は ", c )
c = a / b
print("Line 4 - c の値は ", c )
c = a % b
print("Line 5 - c の値は ", c )
c = a^2
print("Line 6 - c の値は ", c )
c = -a
print("Line 7 - c の値は ", c )

上記プログラムの実行結果は次のとおりです:

Line 1 - c 的值为     31
Line 2 - c 的值为     11
Line 3 - c 的值为     210
Line 4 - c 的值为     2.1
Line 5 - c 的值为     1
Line 6 - c 的值为     441
Line 7 - c 的值为     -21

Luaでは、/除算演算に使用され、計算結果には小数部分が含まれます。//整除演算に使用され、計算結果には小数部分が含まれません。

例

a = 5
b = 2

print("除算演算 - a/b の値は ", a / b )
print("整除演算 - a//b の値は ", a // b )

上記プログラムの実行結果は次のとおりです:

除法运算 - a/b 的值为   2.5
整除运算 - a//b 的值为  2

関係演算子

次の表は、Lua言語でよく使われる関係演算子を示しています。Aの値を10、Bの値を20とします:

演算子説明例
==等しい、2つの値が等しいかどうかを検出し、等しければ true を返し、等しくなければ false を返します。(A == B) は false。
~=等しくない、2つの値が等しいかどうかを検出し、等しくなければ true を返し、等しければ false を返します。(A ~= B) は true。
>より大きい、左の値が右の値より大きければ true を返し、そうでなければ false を返します。(A > B) は false。
<より小さい、左の値が右の値より大きければ false を返し、そうでなければ true を返します。(A < B) は true。
>=以上、左の値が右の値以上であれば true を返し、そうでなければ false を返します。(A >= B) は false を返します。
<=以下、左の値が右の値以下であれば true を返し、そうでなければ false を返します。(A <= B) は true を返します。

例

次の例を通じて、関係演算子の応用をより深く理解できます。

例

a = 21
b = 10

if( a == b )
then
   print("Line 1 - a は b と等しい" )
else
   print("Line 1 - a は b と等しくない" )
end

if( a ~= b )
then
   print("Line 2 - a は b と等しくない" )
else
   print("Line 2 - a は b と等しい" )
end

if ( a < b )
then
   print("Line 3 - a は b より小さい" )
else
   print("Line 3 - a は b 以上" )
end

if ( a > b )
then
   print("Line 4 - a は b より大きい" )
else
   print("Line 5 - a は b 以下" )
end

-- a と b の値を変更
a = 5
b = 20
if ( a <= b )
then
   print("Line 5 - a は b 以下" )
end

if ( b >= a )
then
   print("Line 6 - b は a 以上" )
end

上記プログラムの実行結果は次のとおりです:

Line 1 - a 不等于 b
Line 2 - a 不等于 b
Line 3 - a 大于等于 b
Line 4 - a 大于 b
Line 5 - a 小于等于  b
Line 6 - b 大于等于 a

論理演算子

次の表は、Lua言語でよく使われる論理演算子を示しています。Aの値を true、Bの値を false とします:

演算子説明例
and論理積演算子。A が false の場合は A を返し、それ以外の場合は B を返します。(A and B) は false。
or論理和演算子。A が true の場合は A を返し、それ以外の場合は B を返します。(A or B) は true。
not論理否定演算子。論理演算の結果と逆で、条件が true なら論理否定は false になります。not(A and B) は true。

例

次の例を通じて、論理演算子の応用をより深く理解できます。

例

a = true
b = true

if ( a and b )
then
   print("a and b - 条件は true" )
end

if ( a or b )
then
   print("a or b - 条件は true" )
end

print("---------区切り線---------" )

-- a と b の値を変更
a = false
b = true

if ( a and b )
then
   print("a and b - 条件は true" )
else
   print("a and b - 条件は false" )
end

if ( not( a and b) )
then
   print("not( a and b) - 条件は true" )
else
   print("not( a and b) - 条件は false" )
end

上記プログラムの実行結果は次のとおりです:

a and b - 条件为 true
a or b - 条件为 true
---------分割线---------
a and b - 条件为 false
not( a and b) - 条件为 true

その他の演算子

次の表は、Lua言語の連結演算子と、テーブルまたは文字列の長さを計算する演算子を示しています:

演算子説明例
..2つの文字列を連結します。a..b 、ここで a は "Hello "、b は "World" で、出力結果は "Hello World" です。
#単項演算子で、文字列またはテーブルの長さを返します。#"Hello" は 5 を返します。

例

次の例を通じて、連結演算子と、テーブルまたは文字列の長さを計算する演算子の応用をより深く理解できます。

例

a = "Hello "
b = "World"

print("文字列 a と b を連結 ", a..b )

print("b の文字列の長さ ",#b )

print("文字列 Test の長さ ",#"Test" )

print("サンプルのURLの長さ ",#"www.example.com" )

上記プログラムの実行結果は次のとおりです:

连接字符串 a 和 b     Hello World
b 字符串长度     5
字符串 Test 长度     4
サンプル网址长度     14

演算子の優先順位

高いものから低いものへの順序:

^
not    - (unary)
*      /       %
+      -
..
<      >      <=     >=     ~=     ==
and
or

除いて^と..以外のすべての二項演算子は左結合です。

a+i < b/2+1          <-->       (a+i) < ((b/2)+1)
5+x^2*8              <-->       5+((x^2)*8)
a < y and y <= z     <-->       (a < y) and (y <= z)
-x^2                 <-->       -(x^2)
x^y^z                <-->       x^(y^z)

例

次の例を通じて、Lua言語の演算子の優先順位をより深く理解できます。

例

a = 20
b = 10
c = 15
d = 5

e = (a + b) * c / d;-- ( 30 * 15 ) / 5
print("(a + b) * c / d の演算値は :",e )

e = ((a + b) * c) / d; -- (30 * 15 ) / 5
print("((a + b) * c) / d の演算値は :",e )

e = (a + b) * (c / d);-- (30) * (15/5)
print("(a + b) * (c / d) の演算値は :",e )

e = a + (b * c) / d;  -- 20 + (150/5)
print("a + (b * c) / d の演算値は :",e )

上記プログラムの実行結果は次のとおりです:

(a + b) * c / d 运算值为  :    90.0
((a + b) * c) / d 运算值为 :    90.0
(a + b) * (c / d) 运算值为 :    90.0
a + (b * c) / d 运算值为   :    50.0
その他の拡張