鍋あり谷あり

テーマを決めずに適当に書いています。

??演算子

C#2.0 では、Nullable 型や、ruby の yield にかなり近いものが導入されて、便利そうな感じである。
ちょっと面白いのは、小ネタの??演算子

int a = foo() ?? bar() ?? 0 ; 
// foo() と bar() は、int(のようなもの) か null を返すメソッド

と書くと、

int a = foo()==null ? foo() : bar==null() ? bar : 0;

のようなこと(?? を使った方は、foo() や bar() が二回呼ばれる可能性がないという点が異なる)になるらしい。
ruby にもあればいいのにと一瞬思ったが、ruby では

a = foo || bar || 0

と書けばいいのであった。
foo が false を返したときの動作が、C#2.0 の ?? とは異なる(?? は、!=null で判断しているらしい)が、それしか違いがない。
ちなみに。
試してみたら、foo() が 非null なら

int a = foo() ?? bar() ?? 0;

で、bar() は呼ばれない。ちゃんとしている。