「ただの静的型付け言語」ってのは…
皆様ご存知の、静的型付け機能のある言語、でごじゃいます。
>>C#の場合、varは「これから(型は知らんけど)変数書きますよ。名前は○○で、値は〜〜」と発想する書き方の中で使うわけですよね。
これは勝手な思い込みでしょう.型の連鎖で綺麗にきまるので,いちいち書くまでもないって話だと思います.重要なのはどう関数が繋がっているかで,それがきちんと繋がっていれば型なんて一意に求まるもんでしょう.だから書かないだけですよ.繋がるの分かってますから.
リテラルを var で受ける話に注目しすぎなんじゃないかと.
そう言われても「どこでもvar」がイヤな人の気持ちは結局この辺にあると思うので、そこに注目しないと意味が無いというか、いくら啓蒙しようとしても通じないと言いますか。
NyaRuRuさんのご意見がちゃんと理解できていないようで申し訳ないのですが……例えば
http://d.hatena.ne.jp/NyaRuRu/20080311/p1
の例は、興味があるのはanswersという変数が受け取る「データ」だけであって、answersの「型」に興味はない…というかどうでも構わない…違うな、一意に決まるからいちいち意識したくない、例ですよね?こういう場合は別にautoやvarでも構わないと思います。まあ、できたら
ICollection<auto> answers =
と書けたら一番嬉しいんだけど。
C++畑の人は、answersの型が知りたい、その型をコントロールしたい、という強い欲求を持つ…ように調教されてきた(^^;…んだと思います。こっちにちらと書きましたが、その根っこにあるのは書き手の、answerに込める意図*1で、型を明示的に書くのが自然な人間にとっては、型を書くのは「制約を掛ける」とかなんとか言う前に、意図の自然なトレースでしかない面があるんじゃないでしょうか。
つまりvar/autoを書きたくない場合というのは
- 「右辺の式の結果(の型)が欲しい」
のじゃなくて、
- 「左辺の変数の型で結果が欲しい」
という意図で書いてる時なんじゃなかろうか、というわけです。こういう時は、どうやってもそこにautoやvarは書けないです。
…と、思いながらここの中盤(うちのリンクが出てくる前あたり)を読むと、そんなに外してないような気がするんですけど。
*1:書き手の込めた意図が読み手に伝わるかどうかは、ここではどうでもよい。