final フィールドと深い不変性
決して変化しないオブジェクトを構築します
「final フィールドと深い不変性」はCoddyKit上の無料Dart Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDart Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Dart Academyコースには全4レッスンが含まれています。
設計による不変性
immutable オブジェクトは、作成された後に決して変化しません。そのため、アプリ全体でデータを安全かつ予測可能な形で共有できます。🔒
final を知る
final フィールドは、構築時に一度だけ設定され、その後は再代入できません。オブジェクトが存在する間、その値は固定されます。
class Point {
final int x;
Point(this.x);
}再代入はエラー
final フィールドに新しい値を代入しようとすると、コンパイラーが処理を止めます。プログラムが実行される前に間違いを検出できます。
final p = Point(3);
p.x = 9; // compile errorfinal と const の違い
値がコンパイル時に決まっている場合は const を、実行時に計算される場合は final を使用します。どちらも後からの再代入を禁止します。
const pi = 3.14;
final now = DateTime.now();const コンストラクター
クラスに const constructor を指定すると、Dart は完全に固定されたインスタンスを作成できます。すべてのフィールドも final でなければなりません。
class Color {
final int rgb;
const Color(this.rgb);
}共有される const インスタンス
同一の const オブジェクトは、メモリ上でまったく同じインスタンスになります。Dart はそれらを再利用するため、容量と時間の両方を節約できます。
const a = Color(0);
const b = Color(0);
print(identical(a, b)); // true浅い不変性と深い不変性
final フィールドは再代入を防ぎますが、そのフィールドが参照するものまで凍結するわけではありません。final の List にも、要素を追加できます。
final nums = [1, 2];
nums.add(3); // allowed!深い不変性の目標
Deep immutability とは、オブジェクトからたどって到達できるものも一切変更できない状態です。完全に実現するには final だけでは不十分です。
コレクションを凍結する
リストを List.unmodifiable でラップすると、追加や削除を試みたときに例外がスローされます。これで構造全体が凍結されます。
final tags = List.unmodifiable([1, 2]);
tags.add(3); // throws at runtimeconst コレクションリテラル
リテラルの先頭に const を付けると、コンパイル時に作成される完全に不変なコレクションになります。一切変更できません。
const days = ['Mon', 'Tue'];
// days.add(...) is forbidden重要な理由
不変データはスレッドセーフで、キャッシュしやすく、Flutter の state management とも相性が良い特徴があります。意図しない変更によるバグもなくなります。
理解度チェック
final と不変性について、最後に確認しましょう。
まとめ
final はフィールドを固定し、const はコンパイル時の値を固定すること、そして深い不変性には変更できないコレクションまたは const コレクションが必要であることを学びました。🎉
よくある質問
「final フィールドと深い不変性」レッスンは無料ですか?
はい。「final フィールドと深い不変性」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Dart Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Dart Academyコースには全4レッスンが含まれています。
「final フィールドと深い不変性」で何を学びますか?
決して変化しないオブジェクトを構築します ブラウザで直接実行するハンズオンコードでDart Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Dart Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのDart Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「final フィールドと深い不変性」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このDart Academyレッスンでコードを書いて実行できますか?
はい。すべてのDart Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- final フィールドと深い不変性
- sealed クラスと網羅的な switch
- base、interface、final 修飾子
- copyWith と値による等価性