Dartで即時クラスのようなものまとめ

プログラミング

はじめに

Dartに即時クラスが無かったのでがっかりしていたら、Record型というものを見つけたのでまとめておきます。

Record型とは

Dart2.15から導入された新しいデータ型で、イミュータブルなデータ構造を表現するための手段です。クラスと似たような機能を持っていますが、不変性やデータの等価性を保証するための仕組みが組み込まれています。

特徴説明
イミュータブルなデータ定義されたオブジェクトは不変です。
フィールドの自動生成フィールドを定義するだけで自動的にイミュータブルなクラスを生成します。
等価性の比較record型のオブジェクトはフィールドの値に基づいて等価性が比較されます。同じフィールド値を持つ2つのrecord型オブジェクトは等価であると見なされます。
コンパイル時最適化コンパイル時に最適化されるため、効率的な実行性能が期待できます。ヒープメモリを使用せずにスタックメモリに割り当てられる場合があり、オブジェクトの生成と破棄が高速化されます。

Flutterのfreezedパッケージとの比較

Flutterには、イミュータブルなデータクラスを簡単に定義するための便利なパッケージにfreezedがあります。Record型があるので、freezedパッケージを使う意義があるのか気になるので調べておきます。

柔軟性と機能の拡張

Record型はフィールドのイミュータブルなデータクラスをシンプルに定義できますが、freezedパッケージではさらに多くの機能を使えます。例えば、イミュータブルなデータクラスの生成だけでなく、コンストラクタの追加、カスタムメソッドの定義、JSONシリアライズ・デシリアライズのサポート、デバッグ可能な比較やハッシュの自動生成などです。このため、複雑なデータモデルやアプリケーションでより多くの機能が必要な場合には、freezedパッケージの使用が適しています。

コードの簡潔さと保守性

freezedパッケージは、簡潔な記法でイミュータブルなデータクラスを定義できるため、コードの重複を減らす事が出来、コードの品質と保守性を向上させることができます。

Record型の定義と作成

Record型は、recordキーワードを使用して定義されます。以下は、PersonというRecord型を定義し、インスタンスを作成する例です。

record Person(String name, int age);

void main() {
  var person = Person('Alice', 30);
  print(person.name); // Alice
  print(person.age);  // 30
}
Dart

Record型の利点と使用法

Record型はデータの不変性を保証し、安全なコードを記述するのに役立ちます。

record Point(int x, int y);

void main() {
  var p1 = Point(1, 2);
  var p2 = Point(1, 2);

  //フィールドの値が全て一致しているので、等価として判定
  print(p1 == p2); // true

  var p3 = Point(3, 4);
  var points = {p1, p2, p3};
  // p1とp2が等価な為、Setで重複を排除されている
  print(points.length); // 2
}

Dart

Record型とパターンマッチング

Record型はパターンマッチングと組み合わせて強力な機能を提供します。

void processPerson(Person person) {
  // Personオブジェクトのパターンマッチング
  switch (person) {
    case Person('Alice', 30):
      print('Alice is 30 years old.');
      break;
    case Person('Bob', 25):
      print('Bob is 25 years old.');
      break;
    default:
      print('Unknown person.');
  }
}

void main() {
  var person1 = Person('Alice', 30);
  var person2 = Person('Bob', 25);

  processPerson(person1); // Alice is 30 years old.
  processPerson(person2); // Bob is 25 years old.
}

Dart

まとめ

DartのRecord型は、データの不変性を保証し、安全かつ効率的なコードを記述するための便利な機能です。Record型を活用することで、簡潔で明瞭なコードを作成し、バグを減らすことができます。

Flutterなどで、Freezedパッケージを使うほどではない場面では便利そうです。

タイトルとURLをコピーしました