http://blogs.wankuma.com/rti/archive/2008/09/03/155325.aspx
三項演算子は上から評価される(その2)
http://blogs.wankuma.com/rti/archive/2008/09/02/155189.aspx
三項演算子は上から評価される
・・・の続きになるのかな?
http://d.hatena.ne.jp/uskz/20080903/p6
(梶本裕介の日記)
を読んで、面白いな~、と思いました。
確かにプログラマが、どちらの意図で条件演算子を記述したのかを判断する術はないのかもしれませんね。
C# の場合を考えてみると、PHP のような曖昧な記述は問題にはならないように思います。
何故なら、C# の比較演算結果は常に bool 値になる必要があるため、どちらの意図であると解釈されても同じ結果になるからです。
Console.WriteLine(true ? false : true ? true : false);
結果が false と表示されます。
この式は、記述者の意図の解釈として、以下の 2 通りが考えられます。
true ? false : (true ? true : false): // false
(true ? false : true) ? true : false: // false
どちらも、結果は false になります。
true ? false : true ? false : true;
true ? false : (true ? false : true); // false
(true ? false : true) ? false : true; // false
false ? false : false ? false : true;
false ? false : (false ? false : true); // true
(false ? false : false) ? false : true); // true
false ? false : true ? false : true;
false ? false : (true ? false : ture); // false
(false ? false : true) ? false : true; // false
どう書いても 2 通りの意図は同じ結果になります。(間違ってない?ドキドキ)
なお、複数の条件演算子を並べてみても、要するに上記の 2 つの条件演算子の組み合わせを冗長化しているにすぎないと思うので、3 つ重なった場合を考える必要はないでしょうね。
#論破されそうだな~w