🤔

Java ラムダ式について

に公開

背景

java silverを今月受けるが、
ラムダ式は初めて聞く言葉だしそもそも何かわからない。
黒本を解いていて、ラムダ式だけちゃんと理解できなかったので執筆がてらインプットすることにした。

ラムダ式とは❓

そもそもラムダ式とは何なのか。
GPTによると、、

ラムダ式は簡単に言うと、プログラムの中で作れるサクッとした関数みたいなもの
サッと使いたいときに便利な関数

例えば、あなたが「動物たちに挨拶をするプログラム」を作成するとする。
ラムダ式を使用することで、みんなにこんにちはと挨拶する手順をサッと作れる。

animals.forEach(a -> System.out.println("こんにちは" + a + "さん!"))

なるほど、サッと作れる関数か。
関数型プログラミングのスタイルをjavaでも実現できるイメージ?

ちなみに、上記の関数を従来のjavaのお作法(ラムダ式がなかった時代)で書こうとすると

animals.forEach(new java.util.fuction.Consumer<String>() {
 @Override
 public void accept(String animal) {
   System.out.println("こんにちは" + a + "さん!")
 }
}

こうなる。無名クラスを使用して、Consumerインターフェース(何らかの処理を行うが戻り値は返さないインターフェース)をわざわざ呼び出し実装する。
このインターフェースには、ひとつの抽象メソッドであるaccept(単一の入力引数を受け取って結果を返さないメソッド)があり、これをオーバーライドしている。

まとめ

// 配列データ
List<String> animals = Arrays.asList("犬", "猫", "ウサギ");

// 従来のjava
Consumer<String> printName = new Consumer<String>() {
  @Override
  public void accept(String animal) {
    System.out.println("こんにちは、" + animal + "さん!");
  }
};
animals.forEach(printName);

// ラムダ式
Consumer<String> printNameLambda = animal -> System.out.println("こんにちは、" + animal + "さん!");
animals.forEach(printNameLambda);

これでラムダ式に対しての苦手意識はなくなったように思えます。
あとは問題を解いたりして理解を深めていきたい。

Discussion