2020/8/26 Dart : Extension methodsの訳

Extension methods

Dart2.7で導入されたExtension methodは、既存のライブラリに新たな機能を付け加える方法です。あなたは知らず知らずのうちにextension methodを使っているかもしれません。例えば、IDEでコード補完を使用すると、通常のメソッドに加えて拡張メソッドが提案されます。

Overview(概要)

誰かが作ったAPIを使う時、あるいはあなたが幅広く使われるライブラリを実装する時、APIを変更することが不可能、あるいは現実的では無いケースはよくあります。

例えば、文字列を数値へと解析(変換)する以下のコードを考えてみます。

int.parse('42')

↑int型の静的メソッド(クラスメソッド)としてparseメソッドが用意されている。parseメソッドはString型を引数にとる、ということ。

上記の型式よりも、String型のインスタンスメソッドとして「そのString型インスタンスを数値に変換して返すparseIntメソッド」を用意した方がよりniceかもしれません。つまり↓

'42'.parseInt()

ということですね。しかし実際にはStringクラスにparseInt()という名の、自身を数値に変換するメソッドは定義されていません。よってDartpadで以下のコードを実行すると下記のようなエラーが出ます。

void main(){
  print("${"45".parseInt()}");
}

/*
Error compiling to JavaScript:
main.dart:13:17:
Error: The method 'parseInt' isn't defined for the class 'String'.
  print("${"45".parseInt()}");
                ^^^^^^^^
Error: Compilation failed.
*/

Stringクラスに対して上記のparseIntメソッド(の機能)を付け加えたい場合に、Stringクラスの定義内にparseIntメソッドの定義を実装する…