C#でvarを使う

C#のvarについてまとめてみました。

MSDN/OSSでのガイドライン

MSDNGithubC#プロジェクトでスター数が多いdotnet/corefxとmono/monoのガイドラインです。

これらを見るとvarは右辺から型がはっきり分かる場合に限り使い、それ以外の場合は型を明示的に書くとなっています。

var stream = new FileStream(...); // good
var stream = OpenStandardInput(); // bad
InputStream stream = OpenStandardInput(); // good

varを使った場合の可読性について

型を明示的に使う理由として型が明示的な方が可読性が高くなるというものがあります。
しかし場合によってはvarを使っても可読性が損なわれないことがあります。

var tmp = ary[0];
ary[0] = ary[ary.Length - 1];
ary[ary.Length - 1] = tmp;

上記では配列の最初の要素と最後の要素を交換しています。
aryの型は分かりませんがコードを理解する上ではあまり必要ないように思えます。

コードによっては型が明示されていた方が読みやすい例もあるでしょうが、
varを使った場合に可読性が下がるかはケースバイケースだと考えます。
(上意見に関しましては後述の参考文献も参考のこと)

また最近のIDEではvarを使っていてもマウスオーバーで型が示されるためあまり困らないというのもあります。

varのメリット

varを使うメリットがいくつかあります

  • コードを書くのが楽になる

varならば書き始めるときその型が分からなくても良いですし、
ストローク数が少なくてすみます。

型を明示的に書いていた場合リファクタリング時にそれらが置換されてしまいますが、
varの場合はそれが起きません。

  • 長い型を書く場合と比べてスッキリする

まとめ

個人的には以下のような感じにしています。
基本的にvarが使える場合はvarを使います。
ただし型をちゃんと書いた方が可読性が高い場合は型を書くようにします。
(プロジェクトにコーディング規約がある場合はそれに従います。)