Dartの主な修飾子
Dartで扱うことのできる変数宣言時の修飾子は主に以下の5つ
- var
- final
- const
- late
それぞれの特徴と制約を覚えて効率よく変数を扱えるようになりたい!ということでまとめていきます。
var
var
は動的型付けで、初期値から自動的に型を決定します。
割り当てられた初期値の型が変数の型となります。
var count = 0; // int型と推論される
count = 'Hello!'; // エラー
変数宣言時に初期化をしなくてもエラーにはなりませんが、その場合dynamic型かつnullable型として扱われ、静的型付けが可能なDartの利点が失われます。
また、初期化をされてない変数を利用することは予期せぬバグの原因に繋がるため、宣言時と同時に初期化をする利用方法が推奨されます。
final
final
は一度だけ値を設定可能であり、設定後は値の変更ができません。実行時に値が決定されます。
また、初期化前に変数を利用しようとするとエラーになります。
final int MAX_COUNT = 10;
MAX_COUNT = 100; // エラー
final int count;
count++; // エラー
const
const
はコンパイル時定数です。
宣言時の値を設定することが必須で、実行中に値を変更できません。
const String GREETING = 'Hello!';
GREETING = 'Have a Nice Day!'; // エラー
const MORNING_GREETING; // エラー(初期値なしの宣言はできない)
late
late
は遅延初期化を可能にします。
宣言時に初期化をする必要がなく、後で値を設定できます。
var
と異なり、明示的に型を指定する必要があります。
こちらも初期化前に変数を利用しようとするとエラーになります。
late String greeting;
print(greeting); // エラー
greeting = 'Hello!'; // 後で初期化ができる
まとめ
修飾子 | 再代入 | 初期化タイミング | 代入(初期化)可能な値の種類 |
---|---|---|---|
var | 可能 | 宣言時 | 任意 |
final | 不可 | 実行時 | 任意 |
const | 不可 | コンパイル時 | 定数のみ |
late | 可能 | 遅延(初回参照時) | 任意 |