エンターテイメント!!

遊戯王好きのJavaエンジニアのブログ。バーニングソウルを会得する特訓中。

Javaの関数:ラムダの考察

Java8がリリースされてから1年半近く経ったので、自分の中に落とし込んだラムダのイメージを吐き出す。
まだ、業務でJava8触ったことないけど。

ラムダが結構話題になったけど、まだ使ってない人にはメリットが分かりづらいのが現状だと思う。
一番の問題は、現場での適用のさせ方が想像できないことだと思う。
サンプルは結構上がっているけど、どれもシンプル過ぎてパッとしてない感じがする。
感想を聞いて(盗み聞きして)みると、「よく分からない」「こんなの使えるわけない」とかが多い気がする。
ぶっちゃけ、自分も最初見た時はわからなかった。
ただ、使ってみたり、いろんな人の意見を聞いて、自分の腹の中に落としこむと、随分と納得できた。

自分が納得したラムダのメリット
・記述の簡素化
 どこでも言われてますね。。。
 確かに見た目は簡単になります。
 少ないコードで意図が理解しやすくなるは、単純ですが大きなメリットです。
 コードが少ないとバグの混入リスクが減るから、品質向上も期待できると思っています。
・並列処理を簡単実装
 並列化が絶対いいってわけではないけど、やるってなると結構労力がいる。
 それが簡略化されている。
★データと処理の分離による、オブジェクト指向っぽい考えの強制
 これが一番でかいと思う。
 こういう描き方をしているところは見たことないけど、自分はこれが一番しっくりきた。
 なんというか、for文だとデータの状態を判断して処理するので、回りくどかったり、面倒だったりする。
 for文の最初から追わないと何がしたいのか分からないのが相当厄介。
 ラムダを使うことで情報がフラット化されて、何がしたいのかある程度伝わる。
 mapならデータの変換、forEachなら逐次処理とか。
 また、変なデータが途中で出てくることが無いので、純粋に処理だけが書ける。
 データとデータに対する処理がきっちりわかれて、処理は抽象化するとわかりやすくなる。
 意図しなくても良好なプログラミングができるので、すごいメリットだと思う。
 やりたいことを実装しようとしたら、誰が書いても同じような実装になるので、
 質の均一化って意味でもいい。



メリットをこれだけ書けば、ラムダのいいとこはわかってくるよね?
もちろん、ケースによってはfor文の方がいい時もあるけど、ラムダのメリットがこれだけあるのに、
使わないのはもったいないと思う。

次は学習方法
いろいろ苦戦したけど、最初はラムダの仕組みを理解するのが近道な気がする。
仕組みを理解してからじゃないと、プログラミングしても真の意味で理解はできないのよ。
ラムダの理解を難しくしている要員は、ラムダって言葉に気を取られて、ラムダを実現するために
用意された技術・考えが蔑ろにされていることだと思う。
特にデフォルトメソッド、関数型インタフェース、実質的final、クラスメソッド参照は必ず抑え欲しい。
ある程度理解orなんとなく意味はわかったけど、つまりはどういうことだってばよ?状態になったら
今度はタイピングして自分の考えを試すことをオススメする。
思っているものと違ったら、ここでわかるし、思っていたとおりだったら。知識の定着が出来るはず。
そうやって準備が出来てからラムダに触れてみてください。
そうすることでラムダのメリットと素晴らしさがわかるハズ。

以下、自分が参考にしたページ
Java in the Box」で有名な櫻庭祐一氏のITProの記事
背景から仕組みまで詳しく解説してある。
http://itpro.nikkeibp.co.jp/article/COLUMN/20060915/248243/?ST=develop

Javaラムダ式 必要な情報がコンパクトにまとまっている
http://www.ne.jp/asahi/hishidama/home/tech/java/lambda.html

岸田直樹氏のブログ「きしだのはてな
いろいろな考察が面白い
http://d.hatena.ne.jp/nowokay/20130824




重要なところは他力本願だけど、良さだけは伝えたい
ラムダはいいものなのに、理解が浅いうちに断念する人が多い印象。。。
布教して広めるくらいの役には立ちたい