R.Tanaka.Ichiro's Blog

主にC# な話題です

目次

Blog 利用状況

ニュース

三項演算子は上から評価される

ふと気になったので

試してみる


var i = 1;
Console.WriteLine(
  i == 1 ? "壱" :
  i == 2 ? "弐" :
  i == 3 ? "参" :
  i == 1 ? "一" : "一杯"
);


表示されたのは、"一" ではなくて "壱" だった。
思ったとおりだった。

投稿日時 : 2008年9月2日 14:07

Feedback

# re: 三項演算子は上から評価される 2008/09/02 14:15 アキラ

ぼくも最近知ったんですけど、三項演算子ではなく条件演算子と呼ぶのが正しいそうです。
三項演算子は ? : の1つしかないのでそう呼ばれてしまってますけど。

# re: 三項演算子は上から評価される 2008/09/02 14:16 アキラ

Wikipedia - 条件演算子
http://ja.wikipedia.org/wiki/%3F:

# re: 三項演算子は上から評価される 2008/09/02 16:40 NyaRuRu

>上から評価される

ガードを持った言語では割と一般的な振る舞いですね.

http://ja.wikipedia.org/wiki/Guarded_Command_Language

http://ja.wikipedia.org/wiki/%E3%82%AC%E3%83%BC%E3%83%89_(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0)

# re: 三項演算子は上から評価される 2008/09/02 20:31 なちゃ

だまされちゃいけません。
左です!
ひ だ り !

# [C/C++]三項演算子は上から評価されてた! 2008/09/02 20:41 酢酸のさっぱり日記

[C/C++]三項演算子は上から評価されてた!

# re: 三項演算子は上から評価される 2008/09/03 0:37 Streetw☆

だまされるところでしたww

# re: 三項演算子は上から評価される 2008/09/03 10:33 R・田中一郎

アキラ さん

>ぼくも最近知ったんですけど、三項演算子ではなく条件演算子と呼ぶのが正しいそうです。

条件演算子ですか、単項演算子・二項演算子と続くので、三項演算子と呼ぶ方が自然な気がしますが、言われてみると確かに条件演算子の方が表現としては的確ですよね。

----------------------------------------
NyaRuRu さん

>ガードを持った言語では割と一般的な振る舞いですね.

ガードっていうんですね。
なるほど~

----------------------------------------
なちゃ さん
Streetw☆ さん

だましてしまいましたw
サンプルコードの表現に合わせて上からと言ってしまいました。
先頭が良いかなと思ったのですが。

# 三項演算子は上から評価される(その2) 2008/09/03 10:35 R.Tanaka.Ichiro's Blog

三項演算子は上から評価される(その2)

# re: 三項演算子は上から評価される 2008/09/03 11:04 melt

>単項演算子・二項演算子と続くので、三項演算子と呼ぶ方が自然
そんなわけないです。
単項演算子と言って ! 演算子なのか ~ 演算子なのか区別が付きますか?
三項演算子という分類の1つに条件演算子というのがあって、他に三項に分類される演算子が無いから三項演算子と言って通じるだけです。

# re: 三項演算子は上から評価される 2008/09/03 11:25 凪瀬

そういえば誰かが条件演算子以外の三項演算子がないものか、とか言ってたなぁ。

# re: 三項演算子は上から評価される 2008/09/03 12:01 アキラ

meltさんも言ってますが
単項演算子、二項演算子、三項演算子というのは演算子の引数の数かな?による分類ですよ。

単項演算子は、++, --, !, ~とかで
二項演算子は +, -, *, /, ==, !=とかですね
で、三項演算子は ? : しか今のところないのです。

演算子にはそれぞれ細かい分類や名前があるのです。
==や!=は比較演算子、|や&は論理演算子とか。
同様に、 ? : は条件演算子と呼ばれているのです。

Wikipediaのリンク貼り間違えたのでもう一回貼ります。
http://ja.wikipedia.org/w/index.php?title=%E6%9D%A1%E4%BB%B6%E6%BC%94%E7%AE%97%E5%AD%90&oldid=19829792

# re: 三項演算子は上から評価される 2008/09/03 12:55 Streetw☆

ヘルプに書いてる
「条件演算子は結合規則が右から左です」
を見て誤解する人もいるでしょうね~

> もう少しいじってネタに使用かなー
書くところでしたw

# re: 三項演算子は上から評価される 2008/09/03 12:57 Streetw☆

あ、(その2)の方にコメントしようと思ったのに
間違えちゃった。。。orz

# re: 三項演算子は上から評価される 2008/09/03 19:21 n

if-else に書き直すと以下の様になるので
「左から評価される」に、なんの疑問もわきませんけどね。

if(i == 1)
{
Console.WriteLine("壱");
}
else
{
if(i == 2)
{
Console.WriteLine("弐");
}
else
{
if(i == 3)
{
Console.WriteLine("参");
}
else
{
if(i == 1)
{
Console.WriteLine("一");
}
else
{
Console.WriteLine("一杯");
}
}
}
}

# re: 三項演算子は上から評価される 2008/09/04 9:33 R・田中一郎

melt さん
凪瀬 さん
アキラ さん

>三項演算子という分類の1つに条件演算子というのがあって、他に三項に分類される演算子が無いから三項演算子と言って通じるだけです。

なるほど、そういう分類なんですね。納得です。
三項演算子のことを条件演算子と呼ぶのだと勘違いしてました。

--------------------------------------------------
Streetw☆ さん

>「条件演算子は結合規則が右から左です」
>を見て誤解する人もいるでしょうね~

僕が実証してみようと思ったきっかけは、条件演算子を多重で使った場合に、演算順序がわからないという表記をどこかで見かけたからなんですよね。
もう少しネタとしてひっぱるつもりですw

--------------------------------------------------
n さん

>if-else に書き直すと以下の様になるので
>「左から評価される」に、なんの疑問もわきませんけどね。

僕も同様のことを思っていたので「思ったとおりの結果だった」と書いたのですが、実際には「そうなる筈だ」という解釈であって、そうなる保障も無いと思うのです。
と言うことを考えるなら、実際やってみちゃった方が早いな、となる訳ですよw

# 三項演算子は上から評価される(その3) 2008/09/04 13:13 R.Tanaka.Ichiro's Blog

三項演算子は上から評価される(その3)

タイトル
名前
Url
コメント