Dartの拡張メソッド

Dart 2.7以降、Dartでは型に拡張メソッドを定義して、機能を追加することができます。構文は以下です(ref. 1)。

extension <extension name> on <type> {
  (<member definition>)*
}

以下の例ではint型に拡張メソッドとしてtoTenTimes()を定義しています。

extension IntExtension on int {
  int toTenTimes() {
    return this * 10;
  }
}

int型に対して、あたかもint型に元からtoTenTimes()というメソッドが定義されていたかのようにtoTenTimes()を呼び出すことが可能になります。ただし、インポートは必要です。拡張メソッドの中では、thisで対象のクラスのインスタンスにアクセスすることができます。

int answer = 42.toTenTimes();
print(answer); // => 420

拡張について名前を定義することができます。上の例では、IntExtensionという名前で拡張をしています。拡張に名前を定義している理由は、「APIがコンフリクトした時に備えて拡張は名前を持っている(extensions have names, which can be helpful if an API conflict arises)(ref. 1)」とのことです。

Reference

  1. Extension methods | Dart

筆者

茨城県つくば市在住のソフトウェアエンジニアです。得意領域はAndroidとFlutterです。「Jetpack ComposeによるAndroid MVVMアーキテクチャ入門」の著者です。

👉もっと詳しく