2016年6月8日水曜日

[C#] Lamda(ラムダ)

こんにちは。明月です。
今日はC#ののLamdaについて勉強します。


プログラムを開発した経験がある方なら最近にLamda(ラムダ)について聞いたことがあると思います。
最近、トレンドになっている関数型プログラミングがこのラムダ式を利用して作成するからです。正確に言うとLamda式(ラムダ)は関数型プログラミングの匿名メソッド式を簡略に記述するような方法です。
すなわち、匿名メソッドを簡略に記述する式がLamda式です。


Lamda


下記の例は匿名メソッドを既存の方法のdelegateを利用して生成しました。




[C#] delegate(デリゲート)


上の例は「delegate」の投稿で勉強したことがある例です。「delegate」キーワードで匿名メソッドを作成することではメンバーで宣言された「delegate」のデータタイプにパラメタデータタイプを合わせて作成します。戻り値もメンバーで宣言された「delegate」のデータタイプに合わせて返却します。


次の例は「Lamda」式で匿名メソッドを実装したことです。



上の例をみると既存の「delegate」から「delegate」のキーワードが省略して、パラメタのデータタイプも省略しました。



上の例を見ると「delegate」式の匿名メソッドを記述する文法より少し簡略になりました。しかし、上の例だけみるとLamda式で実装すればいい点が何かを知れないですね。
それなら複雑に匿名メソッドで使う型の「Enumerable」クラスのメソッドで例を確認してみると差が確実に見えそうです。


[C#] LINQ(リンク)-2 (メソッド式)


次の例を「Enumerable」クラスのメソッドの「Join」です。Joinメソッドのパラメタは匿名メソッドの3個があります。




上の例を見ると2つのリストがあり、Joinメソッドを通ってリストを併合します。「Join」メソッドのパラメタは3つの匿名メソッドが必要です。それで始めのJoinメソッドには「delegate」の匿名メソッドを利用して実装しています。そして2つ目のJoinメソッドは「Lamda」式を利用して実装していますね。
性能は差が無いですが、ソースの可読性がたくさん上がることになります。(ソースが簡単になるとソース可読性が上がります。)


最近のトレンドは関数型プログラミングですが、「delegate」メソッド式よりLamda式で実装すれば複雑な処理も簡単に実装できると思います。後の関数プログラムの並列処理(パラレル)もLamda式で実装すれば簡単に実装ができます。
Javaは「delegate」はないですが、Lamda式はあります。それでLamda式に実装するとJava開発者もソースを読むことができるのでLamda式で作成することに勧めます。
それで関数型プログラムを実装する時はLamda式で作成するようによく覚えましょう。

0 件のコメント