ハルの読書と勉強録

読書の記録や勉強の覚書です。

【C#】varキーワードによる変数宣言(JavaScriptとの相違点)

C#のvarキーワードによる変数宣言と、varキーワードの使い所について簡単にまとめました。

C#のvarキーワードとは

  • 変数のデータ型を明示的に宣言する必要がない変数の宣言方法。
  • コンパイラの型推定により、データ型が設定される。

JavaScriptとの相違点

C#は静的型付け言語のため、動的型付け言語であるJavaScriptの変数宣言とは異なる点があります。

C#のvarキーワードによる変数宣言は、以下のような特徴があります。

  • 必ず初期化子(宣言とともに値を代入する)が必要
  • 宣言時に代入された値をコンパイラが型推定し、変数型が設定される
  • 宣言後に異なるデータ型の代入はできない(コンパイルエラー)

サンプルコードとエラー

namespace Study_ProgrammingCSharp
{
    class Program
    {
        static void Main(string[] args)
        {
            //varキーワードで宣言された変数は、代入時にコンパイラの型推定により型付けされる。
            var somethingWord = "something";
            //静的な型付けのため、異なる型の代入はエラーとなる。
            somethingWord = 111;
            
            //初期化子がないと型推定できないため、エラーとなる。
            var noInitialize;
        }
    }
}

上段:異なるデータ型の代入
下段:初期化子なしでのvarによる変数宣言

varキーワードの使い道

静的型付け言語であるC#において、varキーワードによる変数宣言の使い所や、そもそも使うべきか?については議論が分かれているようです。

以下、オライリーの「プログラミングC# 第7版」よりvarを使う方が良い状況について一部抜粋します。

varを使う方が良い状況

  • 明示的な型付けをしようとすると、同じ型名を2回書かねばならないコード(新しいオブジェクトの初期化など)
  • キャストとジェネリックメソッド(原則として変数宣言で明示的に型名が指定されている場合)
  • 匿名型の場合(実際の型名を書くことができないため、varによる変数宣言が必要)

参考書籍