2009年10月22日

【var変数】 新しい変数宣言var

今日から新しい章、var変数に入ります。
varとは、明示的に型名を書くことなく宣言できる変数宣言です。

class Program
{
    static void Main(string[] args)
    {
        // var変数の定義
        var num = 100;
        var str = "文字列";
    }
}
のように変数宣言して使います。
varには制限があり、ローカル変数でしか使うことが出来ません。
また、もう一つ重要な制限があります。
それは、varは必ず初期化と共に宣言されなければならないというものです。

class Program
{
    static void Main(string[] args)
    {
        // ↓これはコンパイルエラー
        var abc;
        //エラー CS0818: 暗黙的に型指定されたローカル変数を初期化しなければなりません
    }
}
varはなぜ必ず初期化しなければならないのでしょうか?
それは、var変数は宣言時に型を確定させなければならないからです。
つまりvar変数は、どんな型でも受け入れるVariant型ではなく
宣言時には必ずある特定の型に決定されます。
(初期化する値が整数であればint型、文字列ならstring型になる)
varが使用されていても、C#のコンパイル時の強力な型チェックは守られるのです。
見た目だけで判断すると、JavaScriptの変数の様に何でも代入できそうに見えますが、
実際は普通に宣言した変数と何ら変わらないということです。

class Program
{
    static void Main(string[] args)
    {
        // abcは int型に確定
        var abc = 100;
        
        // ↓これはコンパイルエラー
        abc = "文字列";
        // エラー CS0029: 型 'string' を型 'int' に暗黙的に変換できません。
    }
}
じゃあどういう場面で使うと便利なの?というのは次回に回すとして、
今回は、var変数の型が確定される仕組みを表したサンプルコードを示します。
以下のコードを御覧ください。

class Program
{
    static void Main(string[] args)
    {
        // aは int型
        var a = 0;
        // bは string型
        var b = "文字列";
        // cは object型
        var c = new object();

        // dは int型
        var d = 2147483647;    // int型の最大値
        // eは uint型
        var e = 2147483648;    // int型の最大値 + 1
        // fは int型
        var f = -2147483648;   // int型の最小値
        // gは long型
        var g = -2147483649;  // int型の最小値 - 1
        // hは long型
        var h = 9223372036854775807;  // long型の最大値
        // iは ulong型
        var i = 9223372036854775808;   // long型の最大値 + 1

        // jは float型(サフィックスがfまたはFの場合はfloat)
        var j = 1.0f;
        // kは double型(サフィックスがdまたはDの場合はdouble)
        var k = 1.0d;
        // lは decimal型(サフィックスがmまたはMの場合はdecimal)
        var l = 1.0m;
        // mは double型(サフィックスなしの実数はdouble)
        var m = 1.0;
    }
}
<暗黙的に確定される型の法則>
サフィックスの無い整数は、int、uint、long、ulongのうち、その値を表すことが出来る最初の型になる。
整数のサフィックスがUまたはuの場合、uintまたはulongのうち、その値を表すことが出来る最初の型になる。
整数のサフィックスがLまたはlの場合、longまたはulongのうち、その値を表すことが出来る最初の型になる。
整数のサフィックスがUL, Ul, uL, ul, LU, Lu, lU, またはluの場合、ulong型になる。
実数のサフィックスがFまたはfの場合、float型になる。
実数のサフィックスがDまたはdの場合、double型になる。
実数のサフィックスがMまたはmの場合、decimal型になる。


var変数の次の記事へ
ラベル:var変数
posted by 吾一 at 01:06| 3. var変数 | このブログの読者になる | 更新情報をチェックする
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。