copyWith と値による等価性
不変データを更新し、値で比較します
「copyWith と値による等価性」はCoddyKit上の無料Dart Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDart Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Dart Academyコースには全4レッスンが含まれています。
不変データの更新
immutable オブジェクトは変更できないため、更新するときは新しいオブジェクトを作成します。これをきれいに実現するパターンが copyWith です。
copyWith の動作
copyWith メソッドは新しいオブジェクトを返します。省略したフィールドには現在の値を保ち、渡したフィールドだけを置き換えます。
final updated = user.copyWith(name: 'Ada');copyWith の実装
各パラメーターは nullable で、既存のフィールドをデフォルト値として使用します。これにより、呼び出し側は必要な フィールド だけを上書きできます。
User copyWith({String? name}) =>
User(name: name ?? this.name);null の落とし穴
?? this.field という方法では、copyWith を使ってフィールドを null に設定できません。多くのデータモデルでは、この小さな制限を受け入れています。
デフォルトの等価性
デフォルトでは、2つのオブジェクトが等しいのは同じインスタンスである場合だけです。データが同じ2つのコピーも、別のものとして扱われます。
User('Ada') == User('Ada'); // false値による等価性の目的
多くの場合、オブジェクトの同一性ではなくデータが一致したときに等しいとしたいものです。これを値による等価性と呼び、明示的に選択して利用します。
operator == をオーバーライドする
重要なフィールドを比較するように operator == を定義します。これで、同じデータを持つ2つのオブジェクトが等しいものとして扱われます。
bool operator ==(o) =>
o is User && o.name == name;hashCode も必ずオーバーライドする
== をオーバーライドした場合は、必ず hashCode もオーバーライドしてください。等しいオブジェクトは同じハッシュ値を持つ必要があり、そうしないと Set や Map が正しく動作しません。
int get hashCode => name.hashCode;Object.hash ヘルパー
複数のフィールドは Object.hash で簡単に組み合わせられます。渡したすべての値から、1つの適切なハッシュコードを生成します。
int get hashCode => Object.hash(name, age);等価性がコレクションを強化する
値による等価性を使うと、Set は本当の重複を排除でき、Map は同一性ではなくデータに基づいてキーを検索できます。
ツールに任せる
equatable や freezed などのパッケージを使うと、==、hashCode、copyWith を自動生成できます。そのため、不変モデルを短く正確に保てます。🛠️
理解度チェック
値による等価性について確認しましょう。
まとめ
copyWith で不変データを更新し、== と hashCode を組み合わせてデータに基づいて比較することで、真の値による等価性を実現する方法を学びました。🌟
よくある質問
「copyWith と値による等価性」レッスンは無料ですか?
はい。「copyWith と値による等価性」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Dart Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Dart Academyコースには全4レッスンが含まれています。
「copyWith と値による等価性」で何を学びますか?
不変データを更新し、値で比較します ブラウザで直接実行するハンズオンコードでDart Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Dart Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのDart Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「copyWith と値による等価性」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このDart Academyレッスンでコードを書いて実行できますか?
はい。すべてのDart Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- final フィールドと深い不変性
- sealed クラスと網羅的な switch
- base、interface、final 修飾子
- copyWith と値による等価性