lua学習(三)関係演算子
5214 ワード
Lua演算子
演算子は、解釈器に特定の数学または論理演算を実行するように伝える特殊な記号です.Luaには、次の演算子タイプがあります.算術演算子 関係演算子 論理演算子 その他の演算子 算術演算子
次の表に、Lua言語の一般的な演算子を示します.
Aの値を10、Bの値を20に設定します.
オペレータ
説明
≪インスタンス|Instance|emdw≫
+
加算
A+B出力結果30
-
減算
A-B出力結果-10
*
乗算#ジョウサン#
A*B出力結果200
/
除算
B/A w出力結果2
%
余剰を取る
B%A出力結果0
^
べき乗
A^2出力結果100
-
マイナス記号
-A出力結果v-10
≪インスタンス|Instance|emdw≫
算術演算子の応用を以下の例でより徹底的に理解することができる:view p
以上のプログラムの実行結果は次のとおりです.
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の値を10、Bの値を20に設定します.
オペレータ
説明
≪インスタンス|Instance|emdw≫
==
等しい、2つの値が等しいかどうかを検出し、等しい場合はtrueを返し、そうでない場合はfalseを返します.
(A==B)はfalseです.
~=
等しくないで、2つの値が等しいかどうかを検出して、等しくfalseを返して、さもなくばtrueを返します
(A~=B)はtrueです.
>
より大きい、左の値が右の値より大きい場合はtrueを返し、そうでない場合はfalseを返します.
(A>B)はfalseです.
より小さく、左の値が右の値より大きい場合はfalseを返し、そうでない場合はtrueを返します.
(A>=
以上、左の値が右の値より大きい場合はtrueを返します.そうでない場合はfalseを返します.
(A>=B)falseを返します.
<=
より小さい値は等しく、左の値が右の値より小さい場合はtrueを返します.そうでない場合はfalseを返します.
(A<=B)はtrueを返します.
table、userdata、functionタイプの場合、luaはそれらの参照で比較されます.すなわち、それらが1つのオブジェクトを指している場合にのみ等しいです.
≪インスタンス|Instance|emdw≫
関係演算子の適用をより明確に理解するには、次の例を使用します.
[html] view plain
copy
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より大きい」)end
view plai
以上のプログラムの実行結果は次のとおりです.
Line 1-aはbに等しくない
Line 2-aはbに等しくない
Line 3-aがb以上
Line 4-aはbより大きい
論理演算子
次の表に、Lua言語でよく使用される論理演算子を示します.Aの値をtrue、Bの値をfalseに設定します.
オペレータ
説明
≪インスタンス|Instance|emdw≫
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です.
≪インスタンス|Instance|emdw≫
論理演算子の適用をより明確に理解するには、次の例を使用します.
[html] view plain
copy
a = true
b = true
if ( a and b )
then
print(「a and b-条件はtrue」)end
if ( a or b )
then
print(「a orb-条件はtrue」)end
print(「----------分割線-------」)--aとbの値を変更します.
a = false
b = true
if ( a and b )
then
print(「aandb-条件はtrue」)else
print(「aandb-条件は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言語の接続演算子と、計算テーブルまたは文字列の長さの演算子を示します.
オペレータ
説明
≪インスタンス|Instance|emdw≫
..
2つの文字列を接続
a..b,ここでaは「Hello」,bは「World」であり,出力結果は「Hello World」である.
#
文字列またはテーブルの長さを返す一元演算子.
#「Hello」は5を返します.
≪インスタンス|Instance|emdw≫
次の例では、テーブルまたは文字列の長さを計算する演算子への接続演算子の適用をより明確に理解できます.
[html] view plain
copy
a = "Hello "
b = "World"
print(「接続文字列aおよびb」,a..b)print(「b文字列長」、#b)print(「文字列Test長」#「Test」)以上のプログラムの実行結果は次のとおりです.
接続文字列aとb Hello World
b文字列長5
文字列Test長4
演算子の優先度
高い順から低い順:
[html] view plain
copy
^
not - (unary)
* /
+ -
..
< > <= >= ~= ==
and
or
^と..を除いて外のすべての二元演算子は左に接続されています.
a+i < b/2+1 (a+i)
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)
≪インスタンス|Instance|emdw≫
Lua言語演算子の優先度は、次の例でより明確に理解できます.
[html] view plain
copy
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
演算子は、解釈器に特定の数学または論理演算を実行するように伝える特殊な記号です.Luaには、次の演算子タイプがあります.
次の表に、Lua言語の一般的な演算子を示します.
Aの値を10、Bの値を20に設定します.
オペレータ
説明
≪インスタンス|Instance|emdw≫
+
加算
A+B出力結果30
-
減算
A-B出力結果-10
*
乗算#ジョウサン#
A*B出力結果200
/
除算
B/A w出力結果2
%
余剰を取る
B%A出力結果0
^
べき乗
A^2出力結果100
-
マイナス記号
-A出力結果v-10
≪インスタンス|Instance|emdw≫
算術演算子の応用を以下の例でより徹底的に理解することができる:view p
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の値を10、Bの値を20に設定します.
オペレータ
説明
≪インスタンス|Instance|emdw≫
==
等しい、2つの値が等しいかどうかを検出し、等しい場合はtrueを返し、そうでない場合はfalseを返します.
(A==B)はfalseです.
~=
等しくないで、2つの値が等しいかどうかを検出して、等しくfalseを返して、さもなくばtrueを返します
(A~=B)はtrueです.
>
より大きい、左の値が右の値より大きい場合はtrueを返し、そうでない場合はfalseを返します.
(A>B)はfalseです.
より小さく、左の値が右の値より大きい場合はfalseを返し、そうでない場合はtrueを返します.
(A>=
以上、左の値が右の値より大きい場合はtrueを返します.そうでない場合はfalseを返します.
(A>=B)falseを返します.
<=
より小さい値は等しく、左の値が右の値より小さい場合はtrueを返します.そうでない場合はfalseを返します.
(A<=B)はtrueを返します.
table、userdata、functionタイプの場合、luaはそれらの参照で比較されます.すなわち、それらが1つのオブジェクトを指している場合にのみ等しいです.
≪インスタンス|Instance|emdw≫
関係演算子の適用をより明確に理解するには、次の例を使用します.
[html] view plain
copy
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より大きい」)end
view plai
以上のプログラムの実行結果は次のとおりです.
Line 1-aはbに等しくない
Line 2-aはbに等しくない
Line 3-aがb以上
Line 4-aはbより大きい
論理演算子
次の表に、Lua言語でよく使用される論理演算子を示します.Aの値をtrue、Bの値をfalseに設定します.
オペレータ
説明
≪インスタンス|Instance|emdw≫
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です.
≪インスタンス|Instance|emdw≫
論理演算子の適用をより明確に理解するには、次の例を使用します.
[html] view plain
copy
a = true
b = true
if ( a and b )
then
print(「a and b-条件はtrue」)end
if ( a or b )
then
print(「a orb-条件はtrue」)end
print(「----------分割線-------」)--aとbの値を変更します.
a = false
b = true
if ( a and b )
then
print(「aandb-条件はtrue」)else
print(「aandb-条件は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言語の接続演算子と、計算テーブルまたは文字列の長さの演算子を示します.
オペレータ
説明
≪インスタンス|Instance|emdw≫
..
2つの文字列を接続
a..b,ここでaは「Hello」,bは「World」であり,出力結果は「Hello World」である.
#
文字列またはテーブルの長さを返す一元演算子.
#「Hello」は5を返します.
≪インスタンス|Instance|emdw≫
次の例では、テーブルまたは文字列の長さを計算する演算子への接続演算子の適用をより明確に理解できます.
[html] view plain
copy
a = "Hello "
b = "World"
print(「接続文字列aおよびb」,a..b)print(「b文字列長」、#b)print(「文字列Test長」#「Test」)以上のプログラムの実行結果は次のとおりです.
接続文字列aとb Hello World
b文字列長5
文字列Test長4
演算子の優先度
高い順から低い順:
[html] view plain
copy
^
not - (unary)
* /
+ -
..
< > <= >= ~= ==
and
or
^と..を除いて外のすべての二元演算子は左に接続されています.
a+i < b/2+1 (a+i)
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)
≪インスタンス|Instance|emdw≫
Lua言語演算子の優先度は、次の例でより明確に理解できます.
[html] view plain
copy
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