1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Built_Valueのすすめ (導入)

Posted at

この記事はこちらの和訳です。Flutterを触り始めて理解があやしかったBuild_Valueライブラリについて、自分の勉強用にまとめます。

イントロ

Dartは素晴らしいプログラミング言語だが、クラスやEnum周りの実装がじつは大変だったりする。その例として、Serialization、Immutability、Comparisonがある。

Dartの抱えるSerizalizationの問題

どのアプリを開発しても、モデルをシリアライズする場面が発生する。例えば、メモリやデータベースに保存するために、モデルをJSONオブジェクトへ変換しる場合などだ。Dartはデフォルトではオブジェクトをシリアライズ/デシリアライズ(serialize/de-serialize)する機能をサポートしていない。

DartでJSON Serializeをしてみる

例えば、Divisionというクラスがあるとする。

class Division {
  Division() {}
  int id;
  String name;
  String description;
  String displayName;
}

このモデルをシリアライズするには、かなりのコードを書く必要がある。

モデルをJSONに変換

Map<String, dynamic> toJson() =>
{
  'id': id,
  'name': name,
  'description': description,
  'displayName': displayName
}

JSONをモデルに変換

Division.fromJson(Map<String, dynamic> json)
: id = json['id']
  name = json['name']
  description = json['description']
  displayName = json['displayName']

モデルが増えるごとにこのコードを書くことを想像してほしい!

Dartの抱えるImmutabilityの問題

オブジェクト志向、ファンクションベースのプログラミングでは、immutableオブジェクトとは生成後に変更できないオブジェクトのことを意味するがDartではサポートされていない。

Dartでオブジェクトを比較してみる

Dartのオブジェクトは参照型であり、値型ではないため、比較が難しい。

final person1 = Person(name: 'Jane Doe');
final person2 = User(name: 'Jane Doe');

print(person1 == person2); // false

person1person2は同じ人物だと期待するが、Dartでは別人物として判定される。

Built_Valueを使ってみる

Built_Value (built_value)ライブラリは、上記の問題を解決する目的で作られた。Built_Valueを使うとSerialization、Immutability、ComparisonをDartで扱うことができる。さらに、先に挙げた以外にも下記の機能もサポートしている。

  • hash valueの生成
  • オブジェクトをStringへ変換
  • 複雑なデータのシリアライズ など
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?