Dart Academy · レッスン

初期化子リストとリダイレクト

finalを設定し、コンストラクターを再利用する

レッスン 3/413 ステップ

「初期化子リストとリダイレクト」はCoddyKit上の無料Dart Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDart Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Dart Academyコースには全4レッスンが含まれています。

finalフィールドの設定

finalフィールドは、コンストラクタ本文が実行される前に設定する必要があります。initializer listは、1度だけ値を与えるのに最適な場所です。

class Circle {
  final double area;
  Circle(double r) : area = 3.14 * r * r;
}

initializer listの構文

パラメータリストの後に、コロンとカンマ区切りの代入を追加します。このinitializer listはコンストラクタ本文より前に実行されます。

Point(int x, int y) : x = x, y = y;

本文より前に実行される

initializerの代入が先に行われ、その後で本文が実行されます。そのため、listで設定したフィールドは本文内ですでに使用できます。

class Box {
  final int n;
  Box(int v) : n = v {
    print(n); // available
  }
}

派生値の計算

パラメータから合計値やラベルなどのフィールドを計算し、誰もobjectに触れられないうちに設定するには、initializer listを使います。

class Rect {
  final int area;
  Rect(int w, int h) : area = w * h;
}

複数のinitializer

複数の代入はカンマで区切ります。同じ1つのinitializer listの中で、それぞれ異なるフィールドを設定できます。

Point(int a, int b) : x = a, y = b;

initializer list内のassert

assertをlist内に記述すると、開発中に入力値をチェックできます。オブジェクトが存在する前に不正な値を検出できます。

Circle(double r) : assert(r > 0), area = 3.14 * r * r;

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

コロンの後にthisを使うと、あるコンストラクタから別のコンストラクタへ処理を委譲できます。共通の初期化処理を1か所にまとめられます。

class Point {
  int x, y;
  Point(this.x, this.y);
  Point.zero() : this(0, 0);
}

リダイレクトする理由

リダイレクトを使うとフィールドへの代入の重複を避けられます。名前付きコンストラクタからメインのコンストラクタを呼び出すことで、ロジックをDRYに保てます。

Point.origin() : this(0, 0);

リダイレクト先の本文は空

リダイレクトするコンストラクタには本文がありません。this(...)で対象へ処理を渡すだけで、実際の処理は対象側が行います。

class User {
  String name;
  User(this.name);
  User.anon() : this("anon");
}

処理の順序

処理の流れを覚えておきましょう。initializer listとリダイレクトが先に実行され、その後で本文が実行されます。finalはlistで設定し、追加処理は本文で行います。

initializer listと本文の違い

フィールド、特にfinalの代入にはlistを使い、出力、assertでは足りない検証、メソッド呼び出しなどのロジックにはbodyを使います。

簡単な確認

initializer listについて確認しましょう。

まとめ:初期化とリダイレクト

initializer listを使ってfinalを設定し値を計算する方法、assertで値を検証する方法、そしてthisであるコンストラクタから別のコンストラクタへリダイレクトする方法を学びました。🔀

無料で開始

AI チューターと学ぶ Dart — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
30
レッスン
120

よくある質問

「初期化子リストとリダイレクト」レッスンは無料ですか?

はい。「初期化子リストとリダイレクト」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Dart Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Dart Academyコースには全4レッスンが含まれています。

「初期化子リストとリダイレクト」で何を学びますか?

finalを設定し、コンストラクターを再利用する ブラウザで直接実行するハンズオンコードでDart Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Dart Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのDart Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「初期化子リストとリダイレクト」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このDart Academyレッスンでコードを書いて実行できますか?

はい。すべてのDart Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. デフォルトコンストラクターとパラメーター付きコンストラクター
  2. 意図を明確にする名前付きコンストラクター
  3. 初期化子リストとリダイレクト
  4. Factoryコンストラクターとconstコンストラクター
← Dart Academyに戻る