【Flutter/Dart】リダイレクトコンストラクタ|別のコンストラクタを呼び出す

今回はクラスのコンストラクタに別のコンストラクタを呼び出せる「リダイレクトコンストラクタ(Redirecting constructor)」について紹介します。

名前付きコンストラクタを知らない方は先にこちらの記事をお読みください。

\ 世界最大級のオンライン学習サービス /

目次

リダイレクトコンストラクタとは?

void main() {
  var point = Point.alongXAxis(7);
  print('x:${point.x}');
  print('y:${point.y}');
}

class Point {
  double x, y;

  Point(this.x, this.y);

  Point.alongXAxis(double x) : this(x, 0);
}

//結果
//x:7.0
//y:0.0

リダイレクトコンストラクタとはその名の通り、クラスのメインコンストラクタを呼び出す代わりに、別のコンストラクタを呼び出せる(リダイレクト)コンストラクタのことです。

上記コードの場合Pointクラスのメインコンストラクタではxyのプロパティ値が必要ですが、y = 0とした際のxの値のみ受け取るためにリダイレクトコンストラクタを使用しています。

リダイレクトコンストラクタの定義

クラス名.リダイレクトコンストラクタ名(...) : this(...);
class Point {
  double x, y;

  Point(this.x, this.y);

  Point.alongXAxis(double x) : this(x, 0);
}

リダイレクトコンストラクタは上記コードのように定義します。

リダイレクトコンストラクタで受け取った引数をInitializer List(コロンの後)でメインコンストラクタに渡します。

リダイレクトコンストラクタでクラス生成

var point = Point.alongXAxis(7); //var point = Point(7, 0);と同じ

リダイレクトコンストラクタでのインスタンス化は通常のクラス同様です。

サンプルコード

void main() {
  var point = Point.alongXAxis(7);
  print('x:${point.x}');
  print('y:${point.y}');
}

class Point {
  double x, y;

  Point(this.x, this.y);

  Point.alongXAxis(double x) : this(x, 0);
}

//結果
//x:7.0
//y:0.0

一緒に読みたい

参考

  • URLをコピーしました!
目次