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
740
7
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Javaにおける関数型プログラミンへの取り組み
LL Event 2024 Language Update 発表資料
Yuichi.Sakuraba
September 07, 2024
More Decks by Yuichi.Sakuraba
See All by Yuichi.Sakuraba
Inside Stream API
skrb
1
890
Java 25に至る道
skrb
3
320
Lazy Constant - finalフィールドの遅延初期化
skrb
0
4.5k
Language Update: Java
skrb
2
500
Java 30周年記念! Javaの30年をふりかえる
skrb
4
3.9k
JavaにおけるNull非許容性
skrb
2
4k
あなたはJVMの気持ちを理解できるか?
skrb
6
35k
で、ValhallaのValue Classってどうなったの?
skrb
2
16k
今こそ、ラムダ式を考える - なぜあなたはラムダ式を苦手と感じるのか
skrb
6
28k
Other Decks in Technology
See All in Technology
クラウドセキュリティ入門 ~安全なクラウド利用のための基礎知識~
lhazy
8
7.3k
ガバメントクラウドでのランサムウェア対策
techniczna
1
670
AWS ネットワーク構築でハマった(ハマりかけた) 5選とそこから得た教訓
nagisa53
4
170
AIエージェントの知識表現と推論に なぜグラフが使われるのか - 記号的AIの復権とニューラルAIとの統合
yohei1126
1
270
20260608_Codexの可能性_ノンプログラマー向け_大城追記
doradora09
PRO
0
750
システム監視を 「システムを監視するだけ」で 終わらせないために
seiud
0
170
コンポーネント名には何を含めるべきなのか? / what-should-be-included-in-component-names
airrnot1106
0
250
SmartHR Engineering Team Deck
smarthr
0
170
toio・myCobotでフィジカルAIっぽいことを行うための検討(とりあえず調査) / フィジカルAI LT(IoTLTによる開催)
you
PRO
0
270
システム監視入門
grimoh
5
810
AIがAPIを書く時代に、私たちは何を設計すべきか
nagix
0
200
A Bag-of-Documents Model for Query Specificity
dtunkelang
0
210
Featured
See All Featured
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
How GitHub (no longer) Works
holman
316
150k
Leo the Paperboy
mayatellez
8
2.1k
Designing for humans not robots
tammielis
254
26k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
480
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
460
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.1k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
280
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Optimising Largest Contentful Paint
csswizardry
37
3.9k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
980
Odyssey Design
rkendrick25
PRO
2
740
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