Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Javaにおける関数型プログラミンへの取り組み
Search
Yuichi.Sakuraba
September 07, 2024
Technology
7
600
Javaにおける関数型プログラミンへの取り組み
LL Event 2024 Language Update 発表資料
Yuichi.Sakuraba
September 07, 2024
Tweet
Share
More Decks by Yuichi.Sakuraba
See All by Yuichi.Sakuraba
Language Update: Java
skrb
2
340
Java 30周年記念! Javaの30年をふりかえる
skrb
4
3.3k
JavaにおけるNull非許容性
skrb
2
3.6k
あなたはJVMの気持ちを理解できるか?
skrb
5
27k
で、ValhallaのValue Classってどうなったの?
skrb
2
12k
今こそ、ラムダ式を考える - なぜあなたはラムダ式を苦手と感じるのか
skrb
6
25k
今こそ、ラムダ式を考える - ラムダ式はどうやって動くのか
skrb
7
11k
Project Amberで変わる Javaのプログラミングスタイル
skrb
3
1.2k
String Templateによる文字列補間
skrb
4
4.7k
Other Decks in Technology
See All in Technology
AI AgentをLangflowでサクッと作って、1日働かせてみた!
yano13
1
160
Oracle Database@Google Cloud:サービス概要のご紹介
oracle4engineer
PRO
0
360
JSConf JPのwebsiteをGatsbyからNext.jsに移行した話 - Next.jsの多言語静的サイトと課題
leko
2
190
デザインとエンジニアリングの架け橋を目指す OPTiMのデザインシステム「nucleus」の軌跡と広げ方
optim
0
120
From Natural Language to K8s Operations: The MCP Architecture and Practice of kubectl-ai
appleboy
0
220
OSSで50の競合と戦うためにやったこと
yamadashy
3
990
Behind Postgres 18: The People, the Code, & the Invisible Work | Claire Giordano | PGConfEU 2025
clairegiordano
0
130
AI時代におけるデータの重要性 ~データマネジメントの第一歩~
ryoichi_ota
0
710
ハノーファーメッセ2025で見た生成AI活用ユースケース.pdf
hamadakoji
1
470
AIエージェントによる業務効率化への飽くなき挑戦-AWS上の実開発事例から学んだ効果、現実そしてギャップ-
nasuvitz
5
1.2k
混合雲環境整合異質工作流程工具運行關鍵業務 Job 的經驗分享
yaosiang
0
190
Azure Well-Architected Framework入門
tomokusaba
1
130
Featured
See All Featured
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.5k
Testing 201, or: Great Expectations
jmmastey
45
7.7k
The Invisible Side of Design
smashingmag
302
51k
Principles of Awesome APIs and How to Build Them.
keavy
127
17k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.2k
Designing for humans not robots
tammielis
254
26k
Product Roadmaps are Hard
iamctodd
PRO
55
11k
Typedesign – Prime Four
hannesfritz
42
2.8k
KATA
mclloyd
PRO
32
15k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
9
930
Side Projects
sachag
455
43k
GraphQLの誤解/rethinking-graphql
sonatard
73
11k
Transcript
Javaʹ͓͚Δ ؔܕϓϩάϥϛϯάͷऔΓΈ ᓎఉ༞Ұ Java in the Box
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(); ετϦʔϜม ϥϜμࣜ
Function<Integer, Integer> f = x -> x*x; ؔܕͰͳ͍ ϝιουΛ
͚ͭͩఆٛͨ͠ΠϯλϑΣʔε f Function ΦϒδΣΫτ
Function<Integer, Integer> f = x -> x*x; ϝιουΛ ͚ͭͩఆٛͨ͠
ΠϯλϑΣʔεΛ࣮ͨ͠ ΫϥεͷΠϯελϯγΤʔγϣϯ x*x ͕ϝιουͷϘσΟ
Java ͷݴޠ༷ͷมߋ Java Lang Spec ͚ͩͷมߋͰࡁΉ༷มߋ ൺֱత༰қʹมߋՄೳ JVM Spec ͷมߋ͕ඞཁͱͳΔ༷มߋ
ͱͯϋʔυϧ͕ߴ͍ ؔܕͷಋೖ JVM Spec ͷมߋ͕ඞཁ
Lambdaࣜͷ࣮ݱํ๏ InvokeDynamicͷ׆༻ ݩʑJRubyͳͲಈతܕ͚ݴޠͷͨΊʹ Java 7Ͱಋೖ͞Εͨϝιουίʔϧ༻ͷόΠτίʔυ ࣮ߦ࣌ʹίʔϧ͢ΔϝιουΛ୳ࡧ͔ͯ͠Β ϝιουίʔϧΛߦ͏ LambdaࣜͰಈతʹΫϥεੜΛߦ͔ͬͯΒ ΦϒδΣΫτΠϯελϯγΤʔγϣϯΛߦ͏
InvokeDynamicͷಈ࡞ ొਓ bootstrapϝιου CallSiteΫϥε MethodHandleΫϥε ୳ࡧΛߦ͍݁ՌΛCallSiteͰ͢ϝιου MethodHandleΛอ࣋͢Δίϯςφ ࣮ߦ͢ΔϝιουΛࣔ͢ indy ॳճ
bootstrap ϝιου୳ࡧ CallSite MethodHandle ੜ λʔήοτϝιου ࣮ߦ
InvokeDynamicͷಈ࡞ ొਓ bootstrapϝιου CallSiteΫϥε MethodHandleΫϥε ୳ࡧΛߦ͍݁ՌΛCallSiteͰ͢ϝιου MethodHandleΛอ࣋͢Δίϯςφ ࣮ߦ͢ΔϝιουΛࣔ͢ indy bootstrap
CallSite MethodHandle λʔήοτϝιου ճҎ߱ ࣮ߦ
Lambdͷࣜͷಈ࡞ Java ιʔείʔυ ΫϥεϑΝΠϧ ίϯύΠϧ ϥϜμࣜͷϝιουϘσΟΛ static ϝιουԽͯ͠Ճ -BNCEB ࣮ࣜߦ
CPPUTUSBQ ॳճ ΠϯλϑΣʔε࣮ΫϥεΛಈతੜ static ϝιουΛίʔϧ͢ΔΑ͏ʹ͢Δ ಈతੜΫϥεΛΠϯελϯγΤʔγϣϯ͢Δ CallSite Λੜ CallSite ͔ΒΠϯελϯγΤʔγϣϯ࣮ߦ
Lambdͷࣜͷಈ࡞ Java ιʔείʔυ ΫϥεϑΝΠϧ ίϯύΠϧ ϥϜμࣜͷϝιουϘσΟΛ static ϝιουԽͯ͠Ճ -BNCEB ࣮ࣜߦ
CPPUTUSBQ ॳճ ΠϯλϑΣʔε࣮ΫϥεΛಈతੜ static ϝιουΛίʔϧ͢ΔΑ͏ʹ͢Δ ಈతੜΫϥεΛΠϯελϯγΤʔγϣϯ͢Δ CallSite Λੜ CallSite ͔ΒΠϯελϯγΤʔγϣϯ࣮ߦ ճҎ߱
Project LambdaҎ߱ͷؔܕϓϩάϥϛϯάػೳ Optional Record Πϛϡʔλϒϧͳσʔλܕ Sealed Class ܧঝͷ੍ݶ తσʔλܕ switchࣜ
ܕʹΑΔύλʔϯϚονϯά ͚͍ܽͯΔͷ if ࣜ ྫ֎ॲཧ EitherͳͲఏڙ͞Ε͍ͯͳ͍ I/O ैདྷͷखଓ͖తͳI/OॲཧͷΈ
Project LambdaҎ߱ͷؔܕϓϩάϥϛϯάػೳ ࠓޙಋೖ༧ఆ Stream Gatherer StreamͷΟϯυॲཧ null ڐ༰ܕඇڐ༰ܕ JVMSͷมߋ͕ඞཁ
JavaΛ͏ଆͷঢ়گ खଓ͖తهड़͔Βએݴతهड़ͷաظ એݴతͳඪ४ϥΠϒϥϦ CompletableFuture Flow (Reactive Stream) HTTP Client એݴతͳϥΠϒϥϦϑϨʔϜϫʔΫ
Spring WebFlux Oracle Helidon Red Hat Quarkus
·ͱΊ Java 8ͰͷProject Lambda͕ॹ LambdaࣜΛؔͱͯ͠ѻ͏ ύλʔϯϚονϯά ADTͳͲͷಋೖ͕ਐΉ ݱࡏએݴతهड़ͷաظ
Javaʹ͓͚Δ ؔܕϓϩάϥϛϯάͷऔΓΈ ᓎఉ༞Ұ Java in the Box