Dart Academy · レッスン

Factoryコンストラクターとconstコンストラクター

キャッシュ、サブタイプの返却、コンパイル時オブジェクトの構築

レッスン 4/413 ステップ

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

factoryコンストラクタとは

factoryコンストラクタは通常のコンストラクタに似ていますが、何を返すかを制御できます。そのため、毎回新しいオブジェクトを作る必要はありません。

class Logger {
  factory Logger() => _shared;
}

factoryでキャッシュ済みオブジェクトを返す

factoryは常に作成するのではなく値を返すため、cachedインスタンスを返せます。シングルトンやオブジェクトプールに最適です。

class Logger {
  static final _it = Logger._();
  Logger._();
  factory Logger() => _it;
}

factoryでサブタイプを返す

factoryは、subclassを含め、適切な型の任意のオブジェクトを返せます。実行時に具体的なクラスを選択できます。

factory Shape(String k) =>
    k == "box" ? Box() : Dot();

factoryにはreturnが必要

通常のコンストラクタとは異なり、factoryの本文ではインスタンスをreturnする必要があります。this.で直接フィールドを設定することはありません。

factory User.fromJson(Map j) {
  return User(j["name"]);
}

一般的なパース用factory

factoryパターンは、マップからオブジェクトを構築するようなパース処理で力を発揮します。fromJsonのイディオムはDartやFlutterで広く使われています。

factory User.fromJson(Map<String, dynamic> j) =>
    User(j["name"]);

constコンストラクタとは

constコンストラクタを使うと、すべてのフィールドがfinalで、あらかじめ値が決まっているコンパイル時定数オブジェクトを構築できます。

class Point {
  final int x, y;
  const Point(this.x, this.y);
}

constインスタンスの作成

constキーワードを付けて呼び出すと、変更できないオブジェクトを作成できます。値が等しい2つのconstオブジェクトは、まったく同じインスタンスになります。

const a = Point(1, 2);
const b = Point(1, 2);
print(identical(a, b)); // true

constコンストラクタのルール

すべてのフィールドがfinalで、コンストラクタ本文が空でなければなりません。このルールによって、Dartはコンパイル時にオブジェクトを固定できます。

class Color {
  final int v;
  const Color(this.v);
}

constでメモリを節約

同一のconstオブジェクトはcanonicalizedされ、1つの共有インスタンスにまとめられます。そのため、再利用してもメモリを余分に消費しません。

const reds = [Color(255), Color(255)];

factoryとconstの違い

実行時に何を返すかを決めるときはfactoryを、変更できないコンパイル時の値が必要なときはconstを使います。

概念を組み合わせる

クラスには、通常のコンストラクタ、パース用のfactory、固定値用のconstコンストラクタを用意できます。あらゆるcreationの要件に対応できます。

簡単な確認

factoryコンストラクタについて確認しましょう。

まとめ:factoryとconst

factoryコンストラクタは返すものを制御し、constコンストラクタは共有される変更不可のコンパイル時オブジェクトを作成することを学びました。よくできました!🎉

無料で開始

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

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

コース
30
レッスン
120

よくある質問

「Factoryコンストラクターとconstコンストラクター」レッスンは無料ですか?

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

「Factoryコンストラクターとconstコンストラクター」で何を学びますか?

キャッシュ、サブタイプの返却、コンパイル時オブジェクトの構築 ブラウザで直接実行するハンズオンコードでDart Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「Factoryコンストラクターとconstコンストラクター」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

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