Dart 変数の宣言

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()は実行できない。
宣言を修飾するwords