トップ «前の日記(2008-11-26) 最新 次の日記(2008-11-28)» 編集

日々の破片

Subscribe with livedoor Reader
著作一覧

2008-11-27

_ 三項演算子

まあ、確かに三項演算子⊃?:だけど。

実際のところ、三項演算子というのはどのくらいあるものなんだろうか。

Cには?:しかない。Javaもそうだ。JavaScriptもそう。VBだとIf演算子が三項にもなる。if(s is nothing, 0, s.Length)とかして使うらしい。なんか、Lispみたいだな。(cond ((null s) (0)) (t (length s)))とか。でも、condを多項演算子とは呼ばない。

Rubyの場合は「条件演算子。三項演算子とも呼ばれます。if xx then yy else zz end と同じ意味です。」とまで書かれている。

と、こうなるとメインストリーム(特定の構文禁止とか言い出す世界のこと)としては三項演算子=条件演算子で全然OKじゃないかなぁ。というよりも、ここまで普通にサポートされている演算子を禁止とかいうのはやっぱりわけがわからないな。

でも、ここでPHPですよ。perlとphpで三項演算子の挙動が違う件という記事を読むと、perlというか、これまで上に出てきたすべて、と、PHPでは挙動が異なって、混乱の元になるかも(VBは()を付けるからわかりやすいかも)。でも、それはネストした三項演算子の話だというだけのことで、長い長い関数禁止と同じように、せいぜいネストした三項演算子は禁止とかでいいじゃん。

参考までにC#のLanguage Specification 14.12 Conditional operatorでは

The ?: operator is called the conditional operator. It is at times also called the ternary operator.

と、ternary operatorをエイリアスとして認めている雰囲気ではある。もっともMSDNの言語リファレンス(――specificationではなく)には三項演算子の三の字は出てこなくて条件演算子と書いてあるなぁ。

なんとなくノリでARMを見てみると、5.16 条件演算子と書いてあって、三項とは書かれていないし、そもそも索引にも「三項」というのは出てこない。というか索引では条件演算子が条件式演算子と何か間違っているけど。

さらに、ternay operatorで検索すると、普通に?:の意味で使われている雰囲気で、最終的にはWikipedia

Many programming languages that use C-like syntax feature a ternary operator, ?:, which defines a conditional expression. Since this operator is often the only existing ternary operator in the language, it is sometimes simply referred to as "the ternary operator".

どうせそれしかないんだからシンプルに三項演算子でいいじゃんサムタイムということになるのだろう。

というか、引用されているALGOLのa := if x > 0 then x else -x.がRubyのif修飾子みたいだな(逆だろうが)。というか、ja.Wikipediaの条件選択演算子の「選択」というのはどこのプログラミング言語が使っている言い回しなんだろうかと疑問に感じたり。

_ 本質

xxxの本質は〜というのは、たぶん、今話題にしているxxxの把握の仕方にぶれがありうることを承知の上で、xxxを〜と規定した場合の話をするよ、というような枠組みの明示を含意しているんじゃないかなと、本質という言葉の本質を考えてみた。

本日のツッコミ(全2件) [ツッコミを入れる]
_ naruse (2008-11-27 09:56)

value = <br>conditionA ? valueA :<br>conditionB ? valueB :<br>default;<br>と使うと便利、ってのがあるので、ネスト禁止ってのはそれでそれで微妙ですな。<br>まぁ、PHPには条件演算子をまともに使ってる人間がいなかったって話なのでしょうが。

_ arton (2008-11-27 10:16)

それはいいよね(PHPの仕様は、条件演算子が使われていないことを調べるための実証実験だったりして)。


2003|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|

ジェズイットを見習え