okuzawatsの日記

Android / Kotlin Enthusiast 🤖

Dartのコンストラクタ

Dartにおけるコンストラクタの最も原始的な構文は以下のように書けます。コンストラクタの引数としてString型のパラメータnameを受け取り、コンストラクタの本体の中でメンバ変数に代入しています。

class Dog {
  String name;

  Dog(String name) {
    this.name = name;
  }
}

以下の構文では、コンストラクタの引数として受け取ったパラメータを直接メンバ変数に代入しています。この構文では、メンバ変数をfinalにすることができます。

class Dog {
  final String name;

  Dog(this.name);
}

上記の構文を用いた場合にも、コンストラクタ本体を定義することができます。

class Dog {
  final String name;

  Dog(this.name) {
    print(name);
  }
}

Dog dog = Dog('pochi'); // => pochi

また、this.nameの部分を{}で囲うと、コンストラクタ呼び出しを名前付き引数で行うことができます。

class Dog {
  final String name;

  Dog({this.name});
}

Dog dog = Dog(name: 'pochi');

Dartでは、コンストラクタのオーバーロードができません。その代わりに、Dartでは名前付きコンストラクタを定義することができます。

class Dog {
  String name;

  Dog(String name) {
    this.name = name;
  }

  Dog.noName() {
    name = 'no name';
  }
}

Dog noName = Dog.noName();
print(noName.name); // => no name

なお、上記の例において、プライマリコンストラクタではthisを用いてメンバ変数にアクセスし、名前付きコンストラクタではthisを用いずにメンバ変数にアクセスしている理由は、前者では名前の隠蔽が発生し、後者では発生しないためです。

#Dart

About me 😎

profile

茨城県つくば市在住のソフトウェアエンジニアです。専門領域はAndroidアプリ開発で、特にアーキテクチャに興味があります。某社でAndroidアプリ開発のテックリードをしています。

Jetpack ComposeによるAndroid MVVMアーキテクチャ入門の著者です。

👉 もっと詳しく

Writing 📝

Android MVVMアーキテクチャ入門

Androidアプリ開発の初学者に向けた、MVVM(Model-View-ViewModel)アーキテクチャの入門書を書きました。初学者の方を確実にネクストレベルに引き上げる技術書です。

👉 もっと詳しく

See Also 👀