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
510
Javaにおける関数型プログラミンへの取り組み
LL Event 2024 Language Update 発表資料
Yuichi.Sakuraba
September 07, 2024
Tweet
Share
More Decks by Yuichi.Sakuraba
See All by Yuichi.Sakuraba
JavaにおけるNull非許容性
skrb
2
3.2k
あなたはJVMの気持ちを理解できるか?
skrb
5
12k
で、ValhallaのValue Classってどうなったの?
skrb
2
9.9k
今こそ、ラムダ式を考える - なぜあなたはラムダ式を苦手と感じるのか
skrb
6
23k
今こそ、ラムダ式を考える - ラムダ式はどうやって動くのか
skrb
7
11k
Project Amberで変わる Javaのプログラミングスタイル
skrb
3
1.1k
String Templateによる文字列補間
skrb
4
4.2k
Virtual Threadの動作と効果的な使い方
skrb
2
620
JVMLSに参加してきた
skrb
1
2.1k
Other Decks in Technology
See All in Technology
LINE 購物幕後推手
line_developers_tw
PRO
0
430
Pythonデータ分析実践試験 出題傾向や学習のポイントとテクニカルハイライト
terapyon
1
140
MCPが変えるAIとの協働
knishioka
1
150
Dataverseの検索列について
miyakemito
1
190
ソフトウェアテスト 最初の一歩 〜テスト設計技法をワークで体験しながら学ぶ〜 #JaSSTTokyo / SoftwareTestingFirstStep
nihonbuson
PRO
1
140
Azure Maps Visual in PowerBIで分析しよう
nakasho
0
210
LLMの開発と社会実装の今と未来 / AI Builders' Community (ABC) vol.2
pfn
PRO
1
120
Coding Agentに値札を付けろ
watany
3
410
本当に必要なのは「QAという技術」だった!試行錯誤から生まれた、品質とデリバリーの両取りアプローチ / Turns Out, "QA as a Discipline" Was the Key!
ar_tama
9
4.1k
経済メディア編集部の実務に小さく刺さるAI / small-ai-with-editorial
nkzn
2
240
ペアーズにおける評価ドリブンな AI Agent 開発のご紹介
fukubaka0825
9
2.5k
非root化Androidスマホでも動く仮想マシンアプリを試してみた
arkw
0
120
Featured
See All Featured
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
129
19k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
Unsuck your backbone
ammeep
671
58k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
Rebuilding a faster, lazier Slack
samanthasiow
81
9k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
160
15k
Practical Orchestrator
shlominoach
187
11k
A Modern Web Designer's Workflow
chriscoyier
693
190k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
Large-scale JavaScript Application Architecture
addyosmani
512
110k
A designer walks into a library…
pauljervisheath
205
24k
Building a Scalable Design System with Sketch
lauravandoore
462
33k
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