Open1
Flutterでdata class相当のものを作りたい
Immutableなクラスを作成
@immutable
というアノテーションを付けると、クラスはimmutableクラスと認識され、constが付与されていないなどimmutableな振る舞いをしない場合、警告を出してくれます。
immutableなクラスを作成する場合は、@immutable
をつけておいたほうが良いでしょう。
ただ実際に開発する場合は、freezedパッケージを使う場合が多そうです。
freezedパッケージ
freezedパッケージは、CLIでimmutableなコードを生成してくれます。
immutableなクラスを生成するだけなら、@immutable
をつけるだけで良いですが、その他にも多くの利点があります。
- @Assertを使うことができる
- コンストラクタ@Defaultでデフォルト値を設定することができる
- プロパティごとにdocコメントをつけることができる
- プロパティに@deprecatedもつけることができる
-
toString
,hashCode
、==
を自動で実装してくれる -
copyWith
メソッドの実装 - Unions/Sealed classes対応
copyWith
メソッドの実装
copyWith
はディープコピーしてくれ、一部の値を変更した新しいインスタンスを生成したい場合冗長なコードを書かなくても良くなります。
Company company;
Company newCompany = company.copyWith.director.assistant(name: 'John Smith');
Sealed classes
sealed classのようなパターンマッチングは強力ですが、Dartでは現時点ではサポートされていません。
freezedではkotlinのsealed classと同様の文法で使用することができます。
kotlinにおけるsealed classはenumの拡張版であり、別のオブジェクトを持つことができます。
この辺がわかりやすい事例かと思います。
Freezedを使うことでkotlinのsealed classと同様の振る舞いを待たせることができます。