R・田中一郎タンが着火したと思しき型推論の使いどころ...悩ましいとこです。
匿名でないとシャレならんとこにはvar使え、これは同意です。
わかりきったとこならvarでもいぃんとちゃうの?
これについても同意っちゃー同意なんですけど、
僕がこだわるのがコンパイラの型推論が
プログラマの意図と一致しないことがあるなー、と。
var children = new List<Child>();
僕はおそらく、このテの(省略目的の)varは使わない気がします。
childrenはList<Child>でなくてはならないとは思っていない、
Childの集合でありさえすればえぇのや、
ICollection<Child> children = new List<Child>();
なのよね僕のキモチ的には。
なんて場合でもコンパイラは
List<Child> children = new List<Child>();
だと推論しちゃうですよね。
# '型推論'ってコトバにも引っかかりを感じます。
# 文脈から導き出すんだろうから'型導出'じゃないかしらん
もひとつ。
for ( var i = 0; i < 10; ++i )
僕はこれも使わない(きっと)。
特に配列のindexなど、明確な目的を伴ってiを使うとき、
僕的にはiは(推論された型)intじゃなく符号のないuint(C/C++でのsize_t)
であって欲しいなーとか思うわけです。
# ClsCompliantじゃねぇじゃん!ってーツッコミもコメントにありますが、ともかくも
loop変数にただ回すだけ以上の意味があるなら型を意識したいと考えます。
コードから推論(だから導出だってーの)してくれるけど、
その結果とプログラマの思惑とは必ずしも一致しないよね。
ってことは心得ておかにゃなんねーかと思ってます。
[追記] んじゃ積極的に型推論を使うシチュエーションはあるんだろか、と。
これについても「プログラマの意図がより明確に伝わるなら」の条件に照らすでしょうね。
たとえば:
if ( x > y ) {
var t = x;
x = y;
y = t;
}
「tはxの型に準ずる」
って意図を表現しているんでこれはアリ(επι的に)。