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

Javaにおける関数型プログラミンへの取り組み

 Javaにおける関数型プログラミンへの取り組み

LL Event 2024 Language Update 発表資料

Avatar for Yuichi.Sakuraba

Yuichi.Sakuraba

September 07, 2024
Tweet

More Decks by Yuichi.Sakuraba

Other Decks in Technology

Transcript

  1. Java 8 2014: Project Lambda Lambda ࣜ& Stream API ແ໊ؔ਺

    ಺෦ΠςϨʔλʔ var nums = List.of(0, 1, 2, 3, 4); ྫ ϦετͷཁૉΛ  ৐ͨ͠ϦετΛ࡞੒ var squared = nums.stream() .map( x -> x*x ) .toList(); ετϦʔϜม׵ ϥϜμࣜ
  2. Function<Integer, Integer> f = x -> x*x; ؔ਺ܕͰ͸ͳ͍ ϝιουΛ 

    ͚ͭͩఆٛͨ͠ΠϯλϑΣʔε f ͸ Function ΦϒδΣΫτ
  3. Function<Integer, Integer> f = x -> x*x; ϝιουΛ  ͚ͭͩఆٛͨ͠

    ΠϯλϑΣʔεΛ࣮૷ͨ͠ ΫϥεͷΠϯελϯγΤʔγϣϯ x*x ͕ϝιουͷϘσΟ
  4. Lambdͷࣜͷಈ࡞ Java ιʔείʔυ ΫϥεϑΝΠϧ ίϯύΠϧ ϥϜμࣜͷϝιουϘσΟΛ static ϝιουԽͯ͠௥Ճ -BNCEB ࣮ࣜߦ

    CPPUTUSBQ ॳճ ΠϯλϑΣʔε࣮૷ΫϥεΛಈతੜ੒ static ϝιουΛίʔϧ͢ΔΑ͏ʹ͢Δ ಈతੜ੒ΫϥεΛΠϯελϯγΤʔγϣϯ͢Δ CallSite Λੜ੒ CallSite ͔ΒΠϯελϯγΤʔγϣϯ࣮ߦ
  5. Lambdͷࣜͷಈ࡞ Java ιʔείʔυ ΫϥεϑΝΠϧ ίϯύΠϧ ϥϜμࣜͷϝιουϘσΟΛ static ϝιουԽͯ͠௥Ճ -BNCEB ࣮ࣜߦ

    CPPUTUSBQ ॳճ ΠϯλϑΣʔε࣮૷ΫϥεΛಈతੜ੒ static ϝιουΛίʔϧ͢ΔΑ͏ʹ͢Δ ಈతੜ੒ΫϥεΛΠϯελϯγΤʔγϣϯ͢Δ CallSite Λੜ੒ CallSite ͔ΒΠϯελϯγΤʔγϣϯ࣮ߦ ճ໨Ҏ߱
  6. Project LambdaҎ߱ͷؔ਺ܕϓϩάϥϛϯάػೳ Optional Record Πϛϡʔλϒϧͳσʔλܕ Sealed Class ܧঝͷ੍ݶ ୅਺తσʔλܕ switchࣜ

    ܕʹΑΔύλʔϯϚονϯά ͚͍ܽͯΔ΋ͷ if ࣜ ྫ֎ॲཧ EitherͳͲ͸ఏڙ͞Ε͍ͯͳ͍ I/O ैདྷͷखଓ͖తͳI/OॲཧͷΈ