すらぼうの開発ノート

モバイルアプリエンジニアのメモ

【Dart】Initializer list(コンストラクタにくっついているコロン「:」)の意味、使い方

意味

Initializer listとは、Dartのクラス内でコンストラクタ作成時に使用するキーワード。 このキーワードの役割は「メンバ変数を初期化する際の処理を記述する」こと。


使い方

基本の使い方は以下。

コンストラクタ() : 変数 = 値;

例で説明する。例えば次のようなクラスがある。

class Human {
  String firstName;
  String lastName; 
  String fullName; // firstName + " " + lastName としたい

  Human(this.firstName, this.lastName);
}

fullNameはfirstNameとlastNameを指定された際に、それらを用いて指定したい。 なのでインスタンス作成時に代入するようにしたい

また上記のHumanクラスの記述では、次のようなランタイムエラーが表示される。

Non-nullable instance field 'fullName' must be initialized.
Try adding an initializer expression, or add a field initializer in this constructor, or mark it 'late'.dartnot_initialized_non_nullable_instance_field

lateキーワードをfullNameにつければエラーは回避できるが、するとnullになってしまうので、あまりよろしくない。

そこでInitializer listを使ってfullNameをインスタンス生成時に初期化する。

class Human {
  String firstName;
  String lastName; 
  String fullName; // firstName + " " + lastName としたい

  Human(this.firstName, this.lastName) : fullName = "$firstName $lastName";
}

これでクラス内の他の処理を行う前に、fullNameを初期化できる。lateキーワードも不要。


参照

dart.dev