C#の型推論について調べていて、へぇーと思ったのでメモですの。
2010-09-29 C#のvarとtry~catchが糞すぎる
http://d.hatena.ne.jp/yaneurao/20100929
ものすごく大雑把に言うと、↓のようなコードをvarを使って書くとコンパイル通らない、という問題ですの。
HogeClass hoge = null;直接的な問題は、ここで、
try {
hoge = new HogeClass();
hoge.XXX();
} catch {
if (hoge!=null)
hoge.YYY();
}
var hoge = null;
とすると、コンパイルが通らないことですの。
var hoge;
でも同じく。
そこでC#の型推論が甘い、という話になるのですけど、
ただ、この書き方を許すということは、
コンパイル時に↓のようなコードを弾かなければいけなくなるということで、
var hoge = null;
if(てきとうな式){
hoge = 1;
}else{
hoge = "文字";
}
それって、すごく大変じゃない? と思ってこれを書き始めたわけなのですけど、元の記事からリンク貼ってあったページを見ると、
[C#][Nemerle]C#の型推論は怠けすぎ
http://d.hatena.ne.jp/akiramei/20100929/1285759272
関数型、あるいは関数型寄りの言語なんかでは、普通に実現できていることのようで、なんか型推論ってすごいんだなぁって、5年以上前の記事を読んで思ったのですの。
この辺りは、よくも悪くも、「よその言語のおいしいところを、つまみ食い」してるに過ぎないC#の限界なのかもしれないですの(ドヤ顔)
ちなみに、一行でこう書いても↓ダメでしたの。当たり前だけど。
var hoge = (true == false) ? 1 : "文字";