2009-01-08
■ [prog] 三項演算s…もとい、条件演算子の右辺に代入が書けるかどうか
単に「三項演算子」と言ってしまうと項を3つとる演算子が全て含まれてしまいますから、 「x ? y : z」のアレのことを指すのは「条件演算子」が正しいです。「Conditional Operator」ですね。
さてそんな条件演算子ですが、「:」の右辺に代入が書けるかどうかご存じでしょうか。つまり
true ? 1 : x = 2
のようなソースがパースエラーにならないかどうか。
ちょっと調べた限りでは、
- 書ける:
- Ruby
- C#
- 書けない:
- C
- Java
のように分かれております。
Javaと文法が似てると思ってたC#ですが、こんなところに違いがあったんですねぇ。
CとJavaは三項演算子の方が代入演算子より優先順位が高いので<br>「:の右辺に代入が書けるか」という命題の立て方からしてナンセンス。<br>「=の左辺に左辺値をもたない式true?1:xが書けない」とい<br>うのが実際のところ。Rubyはそれらの優先順位が逆転しているので標記の式が書ける。
おお、なるほど…。