21
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[lua] 三項演算子なんて飾りです!

Last updated at Posted at 2014-03-15

lua言語には三項演算子がないらしく、代わりに以下の様な書き方をするそうです。

A and B or C

Java育ちの自分は最初「ん?andって&&と一緒だよね、なんでこれが三項演算子の代わりになるんだ?」と思いましたが、どうやらandとorって以下の仕様らしいですね。

 A and B : A が false か nil ならAを返し、そうでなければBを返す。
 A or B  : A が false か nil 以外ならAを返し、そうでなければBを返す。

よってこうなるわけですね。

 A and B or C
 
 ・Aがtrueの場合(B、Cは値)
  「true and B or C」→「B or C」→「B」
 ・Aがfalseの場合(B、Cは値)
  「false and B or C」→「false or C」→「C」

ははぁ、なるほど。納得です。しかし、コレ以上andやorを連結していくと正規表現以上にワケわからなくなりそうですね。三項演算子に使えるよ程度にしておいたほうが良さそうです(^^;

ちょっと注意事項も追記。Bがnilになる可能性のある変数や関数の場合はCまで評価されてしまうので注意ですね。

 A and B or C
 
 ・Aがtrueの場合(Bがnilの場合)
  「true and B or C」→「B(nil) or C」→「C」
 ・Aがtrueの場合(Bがvoid型/nil, falseを返す関数の場合)
  「true and B() or C()」→「B() or C()」→(Bを評価で返り値がnil)→「C」

参考:
Lua5.1.3 SJIS版の更新と三項演算子など
http://hammm.blog21.fc2.com/blog-entry-74.html

2項演算子を使った3項演算子風実装
http://d.hatena.ne.jp/tattyu/20070821

21
16
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?