2014年5月18日日曜日

ラムダ式について

#コメントを頂きましたので、加筆・修正しました。


Dart は「ラムダ式」を使用することができます。
ラムダ式は言語ごとに、またはその文献ごとに説明が異なっていることがあります。


具体的には、
・匿名関数そのものを指す
・匿名関数を短くコーディングできる手法を指す
 (”=>”をラムダ演算子と呼ぶ言語もある)
・第1級オブジェクトとして扱える関数を指す
などです。


「Dart はラムダ式が使える」とよく聞きますが、それらは上記のようなものを総称して言っているのだと思います。
(筆者が勝手に思っています)


まずは関数のショートハンドですが、
// 引数 a に b を足して返すだけ
addingA2B(a, b) {
  return a + b;
}
これは、
addingA2B(a, b) => a + b;
と書けます。


また、関数をオブジェクトとして扱える点については、
var addingA2B = (a, b) => a + b;

// こちらも同意
var addingA2B = (a, b) { return a + b; };
といった感じです。


ラムダ式を用いることでクロージャを実現することも可能です。
#今回は触れませんが。。。


今回あえて引数に型指定を行いませんでしたが、上記関数にオペレータオーバーロードした値を渡してもちゃんと計算してくれました。
かしこい!(って当たり前か。。。)


因みに、、、
Java8 のラムダ式はこれとは意味合いが少し異なっていて、関数型インターフェースを実装する形になります。
(抽象メソッドがない場合や、複数ある場合はどのメソッドを実装してよいか判断できないのでコンパイルエラーになる)
Dart とは全く関係ないですが、最近よく見かけるので比較してみました。


今回はこんなところです。