Menu
Coddy logo textTech

定数コンストラクタ

CoddyのDartジャーニー「オブジェクト指向プログラミング」セクションの一部 — レッスン 13/110。

定数コンストラクタは、コンパイル時定数オブジェクトを作成します。同じ値を持つオブジェクトを const コンストラクタを使用して作成すると、Dart はメモリ内の同じインスタンスを再利用し、パフォーマンスを向上させます。

定数コンストラクタを作成するには、コンストラクタ名の前に const キーワードを追加し、すべてのインスタンス変数が final であることを確認します:

class Color {
  final int red;
  final int green;
  final int blue;

  const Color(this.red, this.green, this.blue);
}

const white = Color(255, 255, 255);
const alsoWhite = Color(255, 255, 255);

print(identical(white, alsoWhite)); // true

whitealsoWhite はどちらも、定数コンストラクタを使用して同一の値で作成されたため、メモリ内のまったく同じオブジェクトを指します。

const キーワードを使わずに const コンストラクタを使用することもできます。その場合、通常の(定数ではない)インスタンスが作成されます:

var red = Color(255, 0, 0);       // 通常のインスタンス
const blue = Color(0, 0, 255);    // 定数インスタンス

定数コンストラクタは、不変の構成オブジェクト、色やサイズのような定義済みの値、そしてメモリ使用量を最適化しながらオブジェクトの不変性を保証したいあらゆる場所で一般的に使用されます。

challenge icon

チャレンジ

簡単

不変で再利用可能な設定を定義するために、定数コンストラクタを使用したシンプルなゲームの設定システムを構築しましょう。

コードを整理するために、2つのファイルを作成します:

  • difficulty.dart: ゲームの難易度設定を表す Difficulty クラスを定義します。クラスには以下を含める必要があります:
    • 3つの final フィールド: name (String)、enemyCount (int)、playerLives (int)
    • これら3つのフィールドすべてを初期化する定数コンストラクタ
    • 難易度情報を表示する display() メソッド
  • main.dart: 難易度クラスをインポートし、3つの定数難易度プリセットを作成します:
    • easy:名前は 'Easy'、敵の数は 5、ライフは 5
    • medium:名前は 'Medium'、敵の数は 10、ライフは 3
    • hard:名前は 'Hard'、敵の数は 20、ライフは 1
    const キーワードを使用して、これら3つすべてをコンパイル時定数として作成してください。次に、上記の順序でそれぞれに対して display() を呼び出します。最後に、identical() を使用して2つの const Difficulty('Easy', 5, 5) オブジェクトが同一であるかどうかを確認し、その結果を出力してください。

display() メソッドは、以下の形式で正確に出力する必要があります:

[name]: [enemyCount] enemies, [playerLives] lives

期待される出力:

Easy: 5 enemies, 5 lives
Medium: 10 enemies, 3 lives
Hard: 20 enemies, 1 lives
true

チートシート

定数コンストラクタは、コンパイル時定数オブジェクトを作成します。同一の値を持つオブジェクトが const コンストラクタを使用して作成されると、Dart はメモリ内の同じインスタンスを再利用します。

定数コンストラクタを作成するには、コンストラクタ名の前に const キーワードを追加し、すべてのインスタンス変数が final であることを確認します:

class Color {
  final int red;
  final int green;
  final int blue;

  const Color(this.red, this.green, this.blue);
}

同一の値を持つ定数インスタンスを作成すると、メモリ内の同じオブジェクトになります:

const white = Color(255, 255, 255);
const alsoWhite = Color(255, 255, 255);

print(identical(white, alsoWhite)); // true

Const コンストラクタは、const キーワードなしで使用して、通常のインスタンスを作成することもできます:

var red = Color(255, 0, 0);       // 通常のインスタンス
const blue = Color(0, 0, 255);    // 定数インスタンス

定数コンストラクタは、不変の構成オブジェクト、定義済みの値、およびメモリ使用量の最適化に役立ちます。

自分で試してみよう

import 'difficulty.dart';

void main() {
  // TODO: constキーワードを使用して、3つの定数難易度プリセットを作成してください:
  // - easy: 名前 'Easy'、敵 5体、ライフ 5
  // - medium: 名前 'Medium'、敵 10体、ライフ 3
  // - hard: 名前 'Hard'、敵 20体、ライフ 1
  
  // TODO: 各難易度に対して、easy、medium、hardの順にdisplay()を呼び出してください
  
  // TODO: 2つの const Difficulty('Easy', 5, 5) オブジェクトが同一であるかどうかを
  // identical() を使用してチェックし、その結果をプリントしてください
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

オブジェクト指向プログラミングのすべてのレッスン