Dart Academy · レッスン

sealed クラスと網羅的な switch

コンパイラーが検査できる階層を閉じます

レッスン 2/413 ステップ

「sealed クラスと網羅的な switch」はCoddyKit上の無料Dart Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDart Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Dart Academyコースには全4レッスンが含まれています。

閉じた型のファミリー

sealed クラスは、サブタイプの集合を固定します。そのファイルの外にあるコードでは新しいサブタイプを追加できないため、ファミリー全体が把握できます。

sealed class Shape {}

サブタイプの宣言

sealed 型のサブクラスは同じファイルに置きます。それらを合わせると、コンパイラーが考慮すべきすべての variant になります。

class Circle extends Shape {}
class Square extends Shape {}

直接インスタンス化できない

sealed クラスは暗黙的に abstract となるため、直接作成することはありません。作成できるのは、既知のサブタイプのいずれかです。

var s = Shape(); // error
var s = Circle(); // ok

sealed が役立つ理由

サブタイプが網羅的であるため、Dart は完全な一覧を把握できます。そのため switch で、すべてのケースを処理したか検証できます。

サブタイプに対する switch

sealed 値に対する switch では、パターンによって各サブタイプにマッチできます。各分岐では、マッチした正確な型を扱えます。

switch (shape) {
  case Circle(): print('round');
  case Square(): print('boxy');
}

網羅性のチェック

サブタイプを1つでも忘れると、コンパイラーがエラーを報告します。sealed の switch でケースを黙って抜かすことはできません。

default は不要

すべてのケースを処理しているため、default 分岐は不要です。追加すると、将来追加されたケースの見落としを隠してしまうだけです。

式としての switch

switch を式として使用すると、値を直接計算できます。網羅性の要件は変わらないため、すべての分岐が何らかの値を返します。

final name = switch (shape) {
  Circle() => 'circle',
  Square() => 'square',
};

新しい variant の追加

後から新しいサブタイプを追加すると、それを処理していないすべての switch が赤く表示されます。コンパイラーが各箇所の更新を案内してくれます。

class Triangle extends Shape {}
// existing switches now error

sealed と abstract の違い

abstract クラスでは、外部に未知のサブタイプを作成できます。そのため switch を網羅的にはできません。sealed は集合を閉じ、完全なチェックを可能にします。

状態の表現に最適

sealed 型は、Loading、Success、Error のようなアプリの状態をモデル化するのに適しています。これにより、各 UI 分岐が必ず存在することを保証できます。✅

sealed class Result {}
class Loading extends Result {}
class Done extends Result {}

理解度チェック

sealed の網羅性について確認しましょう。

まとめ

sealed クラスは型のファミリーを閉じ、すべての switch を網羅的にするため、ケースの不足がコンパイルエラーになることを学びました。🎯

無料で開始

AI チューターと学ぶ Dart — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
30
レッスン
120

よくある質問

「sealed クラスと網羅的な switch」レッスンは無料ですか?

はい。「sealed クラスと網羅的な switch」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Dart Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Dart Academyコースには全4レッスンが含まれています。

「sealed クラスと網羅的な switch」で何を学びますか?

コンパイラーが検査できる階層を閉じます ブラウザで直接実行するハンズオンコードでDart Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Dart Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのDart Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「sealed クラスと網羅的な switch」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このDart Academyレッスンでコードを書いて実行できますか?

はい。すべてのDart Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. final フィールドと深い不変性
  2. sealed クラスと網羅的な switch
  3. base、interface、final 修飾子
  4. copyWith と値による等価性
← Dart Academyに戻る