Dartの宣言の方法には大きく、”var”、”型指定”、”Object”、”dynamic”の4種類があります。
# | 種類 | 説明 |
---|---|---|
1 | var | 初期化時に型が決まる変数を宣言します。 例)var a; a=1; /* 以降int型 */ var b=”なんでも文字列”; /* 以降string型 */ |
2 | 型指定 | int(整数型)やString(文字列型)など利用する型が決まっている場合、型名で宣言します。 例)int a; a=1; /* 整数型 */ String b=”文字列”; /* 文字列型 */ |
3 | Object | いろいろな値を入れることが可能な変数を宣言します。ただし、型はObject型です。Object型にないメンバは使用できません。例えば、以下はObject型がsubstringメンバを持たないのでエラーになります。 例)Object a = ‘Whats up’; print(a.substring(0,4)); // エラー |
4 | dynamic | いろいろな値を入れることが可能な変数を宣言します。型も入れられた値によって変化します。Dartの目的である静的型付けの利点が失われ、想定外の実行時エラーが発生することがあるため使うべきではありません。 例)dynamic a = ‘test’; a = 1; // エラーにならない。aはint型になる。 |
また、追加のマークを付けることで意味を持たせた変数の宣言が可能です。
# | 項目 | 説明 |
---|---|---|
1 | null可能型 | 型宣言の後に?を付けることでnullを入れることが可能な変数を宣言します。 例) int? a; // 数値とnullを取れる変数 初期値はnull Object? b // nullを含めなんでも入れられる変数 Dart以外の言語では変数の宣言時、自動でnullが入ることがありますが、Dartではnull可能型にしない限り、nullを入れることが出来ません。 int a; // nullでもない何も入っていない変数 a = null; // エラー |
2 | late | 最初に変数が使われるまで初期化処理が行われません。 初期化作業が遅延で行われるため、プログラムの動作を軽く出来る可能性があります。 例) late String a = ‘test test’; a.substring(0,4); // ここで初めてaが”‘test test’”で初期化され、substringが実行される。aを使わなければ、初期化されることなく終了できる。 // 以下のように初期化が関数などで行われる場合、関数自体も変数が使われるまで実行されない。 late String a = slowFunc(); // ここでは何もされない。 print(a); // この時点でslowFuncが呼び出される。 |
3 | final | 1度しか値を設定出来ない変数を宣言します。プログラム実行時に1度だけ値を設定しますので、プログラムの起動時に決まる値を設定可能です。const参照。 |
4 | const | 1度しか値を設定出来ない変数を宣言します。constはコンパイル時に1度だけ値を設定します。プログラムの実行時に決まるような値は設定不可です。 final DateTime now = DateTime.now(); // エラーにならない。プログラム実行時の時間が入る。 const DateTime now = DateTime.now(); // エラー。コンパイル時にDateTime.now()は実行できない。 |