読者です 読者をやめる 読者になる 読者になる

型推論,可読性,<del datetime="2007-11-25T13:57:21+09:00">俺様の脳の互換性</del>,既存文法の速読テクニック

.NET

(追記)おわび

(追記煽りっぽくなっててごめんなさい)
上から目線」ってのは仰るとおり.気分を害された方,申し訳ありませんでした.

原文ここから

C# の var の議論を見ていると二言目には「可読性」ってのが出てきますけが,「可読性」ってそんなに以心伝心できるもんですかね?
なんとなく「俺様の脳の互換性」と書いた方が適切に見える話もちらほら.既存の速読テクニックが互換しなくなるのが嫌だという話なのかも.C# 3.0 は Windows Vista ですかいな.

その1

以下の 3 パターンのうち,A2 と A3 では型が明記されていません.

//A1 - 型を明記した場合
string msg = GetMessage();
Console.WriteLine( msg );

//A2 - 型を明記しない場合1
var msg = GetMessage();
Console.WriteLine( msg );

//A3 - 型を明記しない場合2
Console.WriteLine( GetMessage() );

その2

以下の 6 パターンのうち,B5 と B6 では型が明記されていません.

List<int> list;

//B1 - 型を明記した場合1
Func<int, double> conv = (int i) => i*Math.PI;
IEnumerable<double> result = from int i in list conv(i);
Action<double> wl = Console.WriteLine;
result.ForEach(wl);

//B2 - 型を明記した場合2
Func<int, double> conv = (int i) => i*Math.PI;
IEnumerable<double> result = list.Select<int,double>(conv);
Action<double> wl = Console.WriteLine;
result.ForEach(wl);

//B3 - 型を明記した場合3
IEnumerable<double> result = from int i in list select i*Math.PI;
result.ToList<double>().ForEach(Console.WriteLine);

//B4 - 型を明記した場合4
(from int i in list select i*Math.PI).ToList<double>().ForEach(Console.WriteLine);

//B5 - 型を明記しない場合1
var result = from i in list select i*Math.PI;
result.ToList().ForEach(Console.WriteLine);

//B6 - 型を明記しない場合2
(from i in list select i*Math.PI).ToList().ForEach(Console.WriteLine);

どれが読みやすいか

さてここに挙げた例は半分以上屁理屈みたいなものですが,せっかく C# の表現力が増えてきてるんだから,もっとマクロに考えるのが先じゃないかな,と思うわけです.var とか var じゃないとか,型を明記した方が読みやすいとかそうじゃないとか,微妙なところで真剣に議論しているのを目撃すると特に.

とりあえず使ってみる

経験上この辺の議論は,「実際自分でコードを書いてみたことがある」人同士の方が面白いです.個人的にも,「もし将来自分が使うことになったら,きっとこうする」という意見 (追記 が現状どうも大勢を占めているようですが) よりは,「使ってみたけど悲惨だったのでこうした」という意見を聞く方が楽しいです (追記 のでみなさんとりあえず試してみてはいかがでしょうか?).