「Dictionary が長いから var を使う」は間違いか?

― var の本来の理由と、現場で定着した“正しい使われ方” ―

C# を書いていると、こんなコードに出会います。

Dictionary<string, List<int>> scores = new Dictionary<string, List<int>>();

正しい。

でも、正直こう思ったことはありませんか?

長い……

そこで多くの人が、こう書きます。

var scores = new Dictionary<string, List<int>>();

すると、

「それは本来の var の使い方じゃない」

と言われることがあります。

果たして本当にそうなのでしょうか。


結論から言うと

「Dictionary が長いから var を使う」は、実務的には正しい

ただし、

  • それは var が生まれた理由ではない
  • でも var が定着した理由ではある

この2つを分けて考える必要があります。


var が生まれた本当の理由

var は C# 3.0(2007年) で登場しました。

このとき同時に入ってきたのが、LINQ と匿名型です。

var result =
    from p in products
    where p.Price > 100
    select new { p.Name, p.Price };

ここで生成されているのは 匿名型

  • 型は存在する
  • でも 名前がない
  • 人が型名を書くことはできない

つまり、

「長いから」ではなく

「書けないから」

これが var 誕生の理由です。


それでも Dictionary で var が使われる理由

ではなぜ今、こんな場面で var が使われるのでしょう。

var dict = new Dictionary<string, List<int>>();

このとき、

  • 右辺に new がある
  • 型は一目で分かる
  • コンパイル時に型は確定している

つまり 安全性は一切落ちていません

C# の var は、

  • 型を隠すためのものではない
  • 動的型にするためのものでもない

👉

「型を書く必要がないときに、書かなくていい」

という仕組みです。


var は「省略」ではなく「別の書き方」

ここが重要です。

Dictionary<string, int> a = new Dictionary<string, int>();
var b = new Dictionary<string, int>();

この2つは、

  • 型情報
  • 実行結果
  • パフォーマンス

すべて同じです。

違うのは 書き方だけ


なぜ「長い型」を書かなくてよくなったのか

理由はシンプルです。

  • IDE が型を表示してくれる
  • ジェネリクスで型が長くなった
  • ノイズが増えた

結果として、

型を書くメリットより、読みづらさのデメリットが勝った

これが、現場で var が定着した理由です。


使ってよい var / 避けたい var

使ってよい例

var list = new List<int>();
var dict = new Dictionary<string, int>();
var result = products.Where(p => p.Price > 100);

👉 右辺を見れば型が明確


避けたい例(特に初学者)

var x = GetData();
var y = Read();

👉 右辺を見ても型が想像できない

👉 読み手に負担をかける


整理すると

  • var の誕生理由→ 書けない型が出てきたから
  • var の定着理由→ 長い型を書く意味がなくなったから

この2つは矛盾しません。


授業・学習向け一言まとめ

var は

「楽をするための魔法」ではなく

「書かなくていい場面が増えた結果」

だから、

「Dictionary が長いから var を使う」

という感覚は、

現代 C# ではごく自然な判断です。


おわりに

var を理解するということは、

  • C# が静的型言語である理由
  • なぜ LINQ が自然に書けるのか
  • なぜコードの可読性が変わったのか

を理解することでもあります。

文法ではなく、

歴史と設計思想として見ると、

var はとても筋の通った存在です。

訪問数 4 回, 今日の訪問数 4回

C#

Posted by hidepon