Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Sumire Aoki

Sumire Aoki
November 12, 2023
900

Sumire Aoki

「ラムダ式をHowではなくWhyで理解しよう!」
2023/11/11 JJUG CCC Fall にて登壇したときのスライド資料です

Sumire Aoki

November 12, 2023
Tweet

Transcript

  1. public interface Hoge { public void hoge(); } インタフェース 使う側のクラス

    ラムダ式とは(How)実際のコード public class User { public static void main(String[] args) { Hoge h = () -> System.out.println("hoge"); h.hoge();//hogeと表示される } }
  2. Javaのコードで言うと? public class User { public static void main(String[] args)

    { //モッツァレラチーズの仕様の場合 MozzarellaCheese m = new MozzarellaCheese(); //カマンベールチーズの仕様の場合 CamembertCheese c = new CamembertCheese(); いちいち型(扱い方)を変えないといけなくて面倒…
  3. public class Factory { public static CheeseInterface create() { return

    new MozzarellaCheese(); } private static class MozzarellaCheese implements CheeseInterface{ @Override public void desc() { System.out.println("mozzarellaCheese"); } } }
  4. public class Factory { public static CheeseInterface create() { return

    new MozzarellaCheese(); } private static class MozzarellaCheese implements CheeseInterface{ @Override public void desc() { System.out.println("mozzarellaCheese"); } } } インナークラス 「createメソッドに隠したいな」
  5. public class Factory { public static CheeseInterface create() { class

    MozzarellaCheese implements CheeseInterface{ @Override public void desc() { System.out.println("mozzarellaCheese"); } } return new MozzarellaCheese(); } } ローカルクラス 「クラスの名前つける必要ないな」
  6. public class Factory { public static CheeseInterface create() { class

    MozzarellaCheese implements CheeseInterface{ @Override public void desc() { System.out.println("mozzarellaCheese"); } } return c; } } ローカルクラス
  7. public class Factory { public static CheeseInterface create() { CheeseInterface

    c = new CheeseInterface() { @Override public void desc() { System.out.println("mozzarellaCheese"); } }; return c; } } 匿名クラス
  8. 「あー、かなりコードがすっきりした! …いや、待てよ?」 public class Factory { public static CheeseInterface create()

    { CheeseInterface c = new CheeseInterface() { @Override public void desc() { System.out.println("mozzarellaCheese"); } }; return new MozzarellaCheese(); } }
  9. public interface CheeseInterface { public void desc(); } CheeseInterface c

    = new CheeseInterface() { @Override public void desc() { System.out.println("mozzarellaCheese"); } }; ←インタフェース ↓匿名クラス
  10. public interface CheeseInterface { public void desc(); } CheeseInterface c

    = new CheeseInterface() { @Override public void desc() { System.out.println("mozzarellaCheese"); } }; ←インタフェース ↓匿名クラス
  11. public interface CheeseInterface { public void desc(); } CheeseInterface c

    = new CheeseInterface() { @Override public void desc() { System.out.println("mozzarellaCheese"); } }; ←インタフェース ↓匿名クラス