トップ «前の日記(2009-01-07) 最新 次の日記(2009-01-11)» 編集

Route 477



2009-01-08

[prog] 三項演算s…もとい、条件演算子の右辺に代入が書けるかどうか

単に「三項演算子」と言ってしまうと項を3つとる演算子が全て含まれてしまいますから、 「x ? y : z」のアレのことを指すのは「条件演算子」が正しいです。「Conditional Operator」ですね。

さてそんな条件演算子ですが、「:」の右辺に代入が書けるかどうかご存じでしょうか。つまり

true ? 1 : x = 2

のようなソースがパースエラーにならないかどうか。

ちょっと調べた限りでは、

  • 書ける:
    • Ruby
    • C#
  • 書けない:
    • C
    • Java

のように分かれております。

Javaと文法が似てると思ってたC#ですが、こんなところに違いがあったんですねぇ。

本日のツッコミ(全2件) [ツッコミを入れる]
kankichi (2011-11-15 17:15)

CとJavaは三項演算子の方が代入演算子より優先順位が高いので<br>「:の右辺に代入が書けるか」という命題の立て方からしてナンセンス。<br>「=の左辺に左辺値をもたない式true?1:xが書けない」とい<br>うのが実際のところ。Rubyはそれらの優先順位が逆転しているので標記の式が書ける。

yhara (2011-11-23 03:26)

おお、なるほど…。