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
310
Javaにおける関数型プログラミンへの取り組み
LL Event 2024 Language Update 発表資料
Yuichi.Sakuraba
September 07, 2024
Tweet
Share
More Decks by Yuichi.Sakuraba
See All by Yuichi.Sakuraba
今こそ、ラムダ式を考える - なぜあなたはラムダ式を苦手と感じるのか
skrb
6
18k
今こそ、ラムダ式を考える - ラムダ式はどうやって動くのか
skrb
7
10k
Project Amberで変わる Javaのプログラミングスタイル
skrb
3
840
String Templateによる文字列補間
skrb
4
3k
Virtual Threadの動作と効果的な使い方
skrb
2
500
JVMLSに参加してきた
skrb
1
1.9k
Who's Who in Java
skrb
3
19k
Javaの並列/並行処理の基本
skrb
9
3.4k
Getting Started with Presentation
skrb
1
2.4k
Other Decks in Technology
See All in Technology
AWSを始めた頃に陥りがちなポイントをまとめてみた
oshanqq
1
3.4k
なぜクラウドサービスで Web コンソールを提供するのか
shuta13
4
2k
なにもしてないのにNew Relicのデータ転送量が増えていたときに確認したこと
tk3fftk
2
200
Creative UIs with Compose: DroidKaigi 2024
chrishorner
1
230
DuckDB雑紹介(1.1対応版)@DuckDB座談会
ktz
6
1.3k
Jetpack Compose Modifier 徹底解説 / Jetpack Compose Modifier
wiroha
0
140
AI でアップデートする既存テクノロジーと、クラウドエンジニアの生きる道
soracom
PRO
2
400
SAVEPOINT α版
savepoint
0
640
AI活用したくてもできなかった不動産SaaSの今とこれから
nealle
0
260
App Router を実プロダクトで採用して見えてきた勘所をちょっとだけ紹介
marokanatani
1
890
スーパーマリオRPGのリメイク版の変更点からみるUX
nishiharatsubasa
1
330
Estrategias de escalabilidade para projetos web
jessilyneh
2
230
Featured
See All Featured
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
25
3.9k
Teambox: Starting and Learning
jrom
131
8.7k
Six Lessons from altMBA
skipperchong
26
3.3k
Design by the Numbers
sachag
277
19k
Principles of Awesome APIs and How to Build Them.
keavy
125
16k
Product Roadmaps are Hard
iamctodd
PRO
48
10k
From Idea to $5000 a Month in 5 Months
shpigford
379
46k
[RailsConf 2023] Rails as a piece of cake
palkan
48
4.6k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
24
600
XXLCSS - How to scale CSS and keep your sanity
sugarenia
246
1.3M
A Philosophy of Restraint
colly
202
16k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
43
2k
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