忍者ブログ

Memeplexes

プログラミング、3DCGとその他いろいろについて

"Orcas"とC# 3.0 その3 暗黙的に型付けされたローカル変数

C# 3.0ではローカル変数の宣言時に型を指定しなくて良いのだそうです。
class Program
{
    static void Main()
    {
        var id = 1;  //Int32
        System.Console.WriteLine(id);  //1
    }
}

これは、コンパイラが初期化の仕方から自動的に型を推定してくれるからで、
推定しようがない場合はコンパイルエラーになります。
(別に動的型付け言語になったわけではありません)

Compile Error!
class Program
{
    static void Main()
    {
        var id;
        id = 1;
        System.Console.WriteLine(id);
    }
}

これによって何が良くなったかと言うと、1つには多分変更のしやすさでしょう。
コードコンプリートにあったように、IDを数から文字列に変更したくなった場合、
これだと変更するのは一ヶ所で済みます。
(この例よりも複雑な場合でも、少なくとも変更すべき場所が減るはずです)

class Program
{
    static void Main()
    {
        var id = "1";  //String
        System.Console.WriteLine(id);  //1
    }
}

もし明示的に型を指定してしまえば、その部分もintから
stringへ変更しなければなりません。
暗黙的に型付けしてしまえばその必要はないということです。
より変更しやすくなった、アジャイル向けな機能といったところでしょうか。

もう少し重要な理由としてC# 3.0の匿名型が関係しているのでしょう。
using System;

class Program
{
    static void Main()
    {
        var book = new { 
           Name = "利己的な遺伝子",
           Price = 2940 };
        Console.WriteLine("{0} ¥{1}", book.Name, book.Price);
    }
}

驚くべきことに型を即興で作ることが出来ます。
そしてその型には名前がありません。
(もちろん共通中間言語レベルではあるようですが)

このようなことをすると、varが必要不可欠になります。
型の名前がわからないので指定しようが無いからです。

この匿名型はLinqで結果を手っ取り早くまとめるのに使われるようです。

拍手[0回]

PR