Extension Methods

Extension Methods

About

  • Extensions augment existing types.
  • Add functionality without subclassing.
  • Compile-time syntactic sugar.
  • Scoped to library imports.

Main Topics

  1. Basic Extension

    • **Definition: extension` keyword.
    • Example:
      extension NumberExt on int {
        bool get isEven => this % 2 == 0;
      }
  2. Usage

    • **Definition`: Available on type.
    • Example:
      print(42.isEven); // true
  3. Generic Extensions

    • **Definition`: Type parameters.
    • Example:
      extension ListExt<T> on List<T> {
        List<T> duplicate() => [...this, ...this];
      }
  4. Scope

    • **Definition`: Import-bound visibility.
    • Example:
      import 'extensions.dart';

How to Use

  • **Declare`: New methods/properties
  • **Import`: Required for visibility
  • **Conflict`: Name resolution rules
  • **Limitations`: No instance variables

How It Works

  • **Static`: Compile-time resolution
  • **Type-bound`: Specific receiver types
  • **No Overrides`: Can’t override existing

Example Session:

void main() {
  print(5.isEven); // Extension method
  print([1,2].duplicate()); // Generic extension
}

Conclusion

Extension methods elegantly solve the “utility class” problem by putting new functionality where it belongs - directly on the types that need it, while maintaining clean separation of concerns.