Sealed Classes

Sealed Classes

About

  • Sealed classes define a fixed hierarchy of subtypes.
  • Enable exhaustive pattern matching.
  • Compile-time safety for state modeling.
  • Alternative to traditional inheritance.

Main Topics

  1. Basic Sealed Class

    • Definition: sealed modifier with subtypes.
    • Example:
      sealed class Result {}
      class Success extends Result {}
      class Failure extends Result {}
  2. Pattern Matching

    • Definition: Exhaustive switch expressions.
    • Example:
      String handleResult(Result r) => switch(r) {
        Success() => 'Success',
        Failure() => 'Failure'
      };
  3. State Modeling

    • Definition: Representing finite states.
    • Example:
      sealed class AuthState {}
      class LoggedIn extends AuthState {}
      class LoggedOut extends AuthState {}
  4. Algebraic Types

    • Definition: Product and sum types.
    • Example:
      sealed class Shape {}
      class Circle extends Shape {}
      class Rectangle extends Shape {}

How to Use

  • Declare: Use sealed modifier
  • Extend: Define all allowed subtypes
  • Match: Use with switch expressions
  • Exhaust: Compiler checks completeness

How It Works

  • Hierarchy: Fixed at compile-time
  • Patterns: Compiler knows all cases
  • Safety: Prevents missing cases
  • Performance: Optimized by compiler

Example Session:

void main() {
  Result res = Success();
  print(handleResult(res)); // Compiler knows all cases
}

Conclusion

Sealed classes provide compiler-verified state modeling through restricted hierarchies, enabling exhaustive pattern matching and robust domain modeling in Dart applications.