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

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

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.

 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ॲཧͷΈ