Java

ラムダ式(Java)

経緯

先日、筆者の参画しているプロジェクトにて、こんなことが。。。

とある担当者が他のプロジェクトの作業と掛け持ちで作業していたところ、「今のままだと、遅れそうです。」と、PLに報告あり。

PLは筆者が参画しているシステムの同じフレームワークを使用したことがある人を手配し、代わりにその人に作業依頼。

製造~UTまで作業してもらい、元々の担当者がレビュー。
テスト結果は問題ないとなったが、筆者が「ラムダ式ってこのプロジェクトありでしたっけ?」と会議でつぶやいてしまいました。(今思うと、少し後悔)

PLは「(規約的に)ダメだったか記憶が曖昧ですね~。とりあえず、ラムダ式じゃない方がありがたいっすね~

優先度「低」で課題に挙げて、後で時間があるときに修正する。で、会議はいったん落ち着いた。

数日後、担当作業を前倒しで終えた筆者に上記の修正依頼がきた。(心の中でなんてこったとつぶやいた。。。)

これが、今回ラムダ式を少し勉強してみようかな、ブログに備忘録程度に書いておこうかなと思った経緯です。
(結局、修正箇所が多いから、なしになったんですけどね。笑)

ラムダ式とは

Java SE 8から導入された新しい構文の一つであるということ。
これはあくまでも筆者のイメージだが、Stream APIとセットで使用する(した方が効果的?)もの。

ざっくりいうと、「従来よりも短いコードで、処理を記述できるもの」
ではないかと。。。

ちなみに、Stream APIは配列やList、Collectionなどの要素を一括で並び替えや一致判定を行う、メソッドたちと思っていただければ。

例えば。。。

for文でループしながら何かをする場合、以下のようなイメージでソースを書いてきたと思います。

①プログラムの基礎(入社してすぐに習う書き方)

for(int i = 0; i < cities.size(); i++) {    
    System.out.println(cities.get(i));
}

②Iterator

for(Iterator<String> iterator=cities.iterator(); 
    iterator.hasNext(); ) {
    System.out.println(iterator.next());
}

③拡張for文

for(String city : cities){    
    System.out.println(city);
}

ラムダ式となると。。。

cities.forEach(city-> System.out.println(city));

一行で書けます!
上記は処理がSystem.out.printlnでcityを表示しているだけなので、一行ですが、複数行にわたって処理を書く場合は、{} でくくらなけらばなりません。
(ほかのfor文と同じですね。)

さらに。。。

上で書いたfor文に対して、条件を指定して、一致した場合に出力する。
といったようなことをすることもできます。

// 東京の時だけ出力
cities.stream().filter(city-> city >= "東京") 
    .forEach(city -> System.out.println(city));

条件を掛け合わすことも可能です。

他にもたくさん

いろいろなことができるみたいです。
Stream APIをフル活用すれば、縦に長いソースとおさらばできるかもしれませんね。

これから

Java SE 8から導入されたという話を冒頭にしましたが、今後のことを考えるとラムダ式を読める書けるようになっていた方がベターだな。
という結論に至りました。

実際の業務では(筆者は)あまり見たことはありませんが、今後は、目に触れる機会が増えるのではないかと。
そんな時、まったくわからないでは仕事の時に困りますね。
少しづつ、慣れていきましょう。

普及率

とはいえ、実際のところラムダ式で書いているシステム、人、プロジェクトってどのくらいあるんやろ?というところが気になりますね。

ここは是非、コメント欄でご意見を伺いたいところです!!!

余談

C#やJavaScript、Pythonなど、現在主流となる言語もラムダ式で書けるみたいです。

Javaに限らず、ラムダ式がデフォルトスタンダードになっていく可能性もありますね。

実際に書かないと覚えれないというのはエンジニアあるあるだと思いますので、練習で少しづつ書いてみるというのもあるかもしれません。

まずは書くところから始めましょう!!

ABOUT ME
中村満
2020年で7年目の現役SEです! 社会人から仕事でプログラムを触るようになり、なんとかここまでやってきました。 最近バイク(rebel250)を買いました。いつかキャンツーするのが夢です!