Dartにおける関数の動作まとめ

Dartの関数はJavaScriptと同様第一級オブジェクトです。
このへんが開発者であるGoogleさんのいう「動的な」特性になると思うので、すごく簡単に動きをまとめてみようかと思います。

普通に関数定義。

bar(int x) => x*x;
foo() => print("bar = ${bar(3)}");

main() {
  foo();
}

匿名関数を定義、変数に格納して実行。

bar(int x) => x*x;

main() {
  var foo = ((int x) => print("bar = ${bar(x)}"));
  foo(5);
  foo(6);
}

匿名関数を定義、即時実行し戻り値を変数に格納。

bar(int x) => x*x;

main() {
  String foo = ((int x) => "bar = ${bar(x)}")(5);
  print(foo);
}

クロージャ

bar(int x) => () => print("x*x = ${x*x}");

main() {
  var foo = bar(5);
  foo();
  var baz = bar(8);
  baz();
}

単価と数量から金額を計算する単純な関数を・・・

calcAmount(int unitPrice,int quantity) => unitPrice*quantity;

main() {
  print("Amount = ${calcAmount(300,5)}");
}

部分適用。(動的にカリー化する事はできるのでしょうか?)

calcAmount(int unitPrice) => (int quantity) => unitPrice*quantity;

main() {
  //りんごは150円
  var calcAppleAmount = calcAmount(150);
  //りんご5個はいくら?
  print("Apple = ${calcAppleAmount(5)}");
  //バナナは100円
  var calcBananaAmount = calcAmount(100);
  //バナナ10本はいくら?
  print("Banana = ${calcBananaAmount(10)}");
  //---------------------------------------
  //直接呼び出す場合はこうすればOK
  print("Amount = ${calcAmount(300)(5)}");
}

大体こんな感じで、「やりたい」と思ったことは素直に実装できるのは自分のような横着なプログラマには良い特性かもしれません。

前回の記事では、Dartの存在を知ってから数時間で更新したのもあり、クラスベースオブジェクト指向のための基本的な構文を紹介するに留まりましたが、今後は色々と探りつつ面白い構文があれば紹介しようと思います。
次は(自分も含め、気になる人も多いと思うので)変数の静的な型付けについて調べてみようかと思っています。

公式サイトが英文なので、英語力も付けたいところ・・・