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
ES6時代の関数型プログラミング
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Kawabata Kazuki
January 30, 2017
Technology
1
750
ES6時代の関数型プログラミング
We Are Javascripters#3 #wajs #javascript
Kawabata Kazuki
January 30, 2017
Tweet
Share
More Decks by Kawabata Kazuki
See All by Kawabata Kazuki
AIでビットコインとアプリの未来を考えるワークショップ
cab1
0
13
AX時代のナレッジマネジメント.pdf
cab1
0
28
AX時代のオペレーション構築
cab1
0
20
AXを実現するマインドセット
cab1
0
47
Time2Build Kickoff
cab1
0
24
コロナ禍でのチームビルディング
cab1
1
210
Other Decks in Technology
See All in Technology
会社紹介資料 / Sansan Company Profile
sansan33
PRO
15
400k
22nd ACRi Webinar - NTT Kawahara-san's slide
nao_sumikawa
0
100
StrandsとNeptuneを使ってナレッジグラフを構築する
yakumo
1
130
pool.ntp.orgに ⾃宅サーバーで 参加してみたら...
tanyorg
0
670
Kiro IDEのドキュメントを全部読んだので地味だけどちょっと嬉しい機能を紹介する
khmoryz
0
210
AWS Network Firewall Proxyを触ってみた
nagisa53
1
240
[CV勉強会@関東 World Model 読み会] Orbis: Overcoming Challenges of Long-Horizon Prediction in Driving World Models (Mousakhan+, NeurIPS 2025)
abemii
0
150
M&A 後の統合をどう進めるか ─ ナレッジワーク × Poetics が実践した組織とシステムの融合
kworkdev
PRO
1
500
Codex 5.3 と Opus 4.6 にコーポレートサイトを作らせてみた / Codex 5.3 vs Opus 4.6
ama_ch
0
200
配列に見る bash と zsh の違い
kazzpapa3
3
170
【Ubie】AIを活用した広告アセット「爆速」生成事例 | AI_Ops_Community_Vol.2
yoshiki_0316
1
120
Agile Leadership Summit Keynote 2026
m_seki
1
670
Featured
See All Featured
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
52
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.6k
Testing 201, or: Great Expectations
jmmastey
46
8.1k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
330
Rails Girls Zürich Keynote
gr2m
96
14k
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
240
Why Our Code Smells
bkeepers
PRO
340
58k
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
Product Roadmaps are Hard
iamctodd
PRO
55
12k
Building Adaptive Systems
keathley
44
2.9k
Imperfection Machines: The Place of Print at Facebook
scottboms
269
14k
The agentic SEO stack - context over prompts
schlessera
0
650
Transcript
ES6࣌ͷ ؔܕϓϩάϥϛϯάೖ @Kawabata_Lemon
,BXBCBUB-FNPO ,BXBCBUB@-FNPO !,BXBCBUB@-FNPO - Lead engineer of pairs Div. eureka,
Inc. - iOS Engineer
- pairs - couples - Subsidiary of match group /
IAC
None
Agenda ‣ ؔܕͱ ‣ ؔܕ͕Θ͔Δͱ..? ‣ ͚ΕͲ෭࡞༻ͷ͜Δ ‣ ͚Ͳҙຯ͋Δ
ؔܕݴޠͱ ؔܕϓϩάϥϛϯάͰϓϩάϥϜͷߏʹؔΛଟ༻͢ΔͨΊɺ΄ ͱΜͲͷؔܕݴޠͰؔΛୈҰڃΦϒδΣΫτͱͯ͠ѻ͍ɺͦͷཧ తͳܭࢉϞσϧͱͯ͠ୈҰڃΦϒδΣΫτͱͯ͠ͷؔΛѻ͑ΔϥϜ μܭࢉ߲ॻ͖͑Λ࠾༻͍ͯ͠Δɻ 8JLJQFEJB
None
ؔܕݴޠͱ ؔܕϓϩάϥϛϯάͰϓϩάϥϜͷߏʹؔΛଟ༻͢ΔͨΊɺ΄ ͱΜͲͷؔܕݴޠͰؔΛୈҰڃΦϒδΣΫτͱͯ͠ѻ͍ɺͦͷཧ తͳܭࢉϞσϧͱͯ͠ୈҰڃΦϒδΣΫτͱͯ͠ͷؔΛѻ͑ΔϥϜ μܭࢉ߲ॻ͖͑Λ࠾༻͍ͯ͠Δɻ 8JLJQFEJB มʹؔΛ͍ΕΒΕΔ
ͲͷݴޠͰֶͿ͔ ECMASCRIPT2015
ؔܕΛֶͿͱ? ‣ ෭࡞༻͕ؾʹͳΔΑ͏ʹͳΔ ɹ-> ίϯςΩετʹΑͬͯ݁Ռ͕ҟͳΔίʔυΛආ͚Δ(lexical) ‣ ࠶ར༻ੑ͕ؾʹͳΔΑ͏ʹͳΔ -> ϓϩάϥϜͱͯ͠ͷϞδϡʔϧੑ ->
ςετ͢͠͞(Testability)
ྫ͑͜Μͳίʔυ͕
͜͏ͳΓ·͢
None
ߟ͑ํΛม͑Δ ‣ ʹରͯ͠Ͳ͏͖߹͏͔ ‣ ԿճͬͯͪΌΜͱಈ͘ͷͳͷ͔ ‣ ೖ͢Δ͜ͱ෭࡞༻ΛੜΉ
ࢀরಁաੑ in out Function ͋Δೖྗʹର͢Δग़ྗ͕ৗʹಉ͡Ͱ͋Δͱ͍͏͜ͱ ෭࡞༻͕ͳ͍ 1 2 (x) =>
x+1 ͜ͷؔৗʹ͕͑1ର1 1 2 (x) => x+1 ͳΜ͔͍͓ͬͯͳ͡ ͱͲ͏͖߹͏͔
෭࡞༻ʁ ݺͿͨͼʹ݁Ռ͕ҟͳΔ inͱout͕ৗʹಉ͡อূ͕ͳ͍ʂ
൚༻ੑ ‣ ͍·ΘͤΔ ‣ Έཱͯͯ͑Δ in out Function in out
Function2 Կճ͑Δͷ͔
͍·ΘͤΔ ‣ Ϟδϡʔϧͱͯ͠ͷϓϩάϥϜ খ͍͞ͷΛΈ߹Θͤͯେ͖ͳͷΛ࡞Δ Ϩΰͷߟ͑ํ ->
ೖ͢Δ͜ͱ෭࡞༻ΛੜΉ ‣ ͍ͭͲ͜Ͱมߋͨ͠ͷ͔Θ͔Βͳ͘ͳΔ ‣ είʔϓ֎Ͱঢ়ଶΛ࣋ͬͨΓ….
ECMASCRIPT2015 ࣌ͰͷؔܕϓϩάϥϛϯάͰؾΛ͚ͭΔ͜ͱ ‣ มͷר্͖͛ʹࠔΒͳ͍ͨΊʹlet,constΛ͓͏ let,constʹ͢Δ͜ͱͰ ReferenceErrorΛىͤ͜Δ
ECMASCRIPT2015 ࣌ͰͷؔܕϓϩάϥϛϯάͰؾΛ͚ͭΔ͜ͱ ‣ ॻ͍ͨείʔϓ௨Γͷ࣮ߦΛͤ͞ΔͨΊʹ => Λ͓͏
ECMASCRIPT2015 ࣌ͰͷؔܕϓϩάϥϛϯάͰؾΛ͚ͭΔ͜ͱ ‣ ॻ͍ͨείʔϓ௨Γͷ࣮ߦΛͤ͞ΔͨΊʹ => Λ͓͏ ఆٛ࣌ͷthis ࣮ߦ࣌ͷthis
ECMASCRIPT2015 ࣌ͰͷؔܕϓϩάϥϛϯάͰؾΛ͚ͭΔ͜ͱ ‣ ॻ͍ͨείʔϓ௨Γͷ࣮ߦΛͤ͞ΔͨΊʹ => Λ͓͏ ఆٛ࣌ͷthis ࣮ߦ࣌ͷthis
ͦΕͰͬͺΓ෭࡞༻͖·ͱ͏ ؔܕݴޠͲͷΑ͏ʹઓ͖͔ͬͯͨ ‣ Functor, Applicative, MonadͷҙຯΛͳΜͱͳ͘ཧղ͢Δ
x f(x) g(f(x) Applicative x f(x) Functor Functor, Applicative, Monadʁ
Monad = Functor + Applicative + ػೳ(ܭࢉઓུ) ͷػೳΛͭσʔλߏ ཁૉʹؔΛదԠͰ͖Δ ͦΕΛܨ͛ΒΕΔ Λฦ͔͢ ࣍ͷॲཧΛΑ Ϳ͔ʜFUD
None
mapϞφυ Applicative(ͪΌΜͱܨ͛ΒΕΔ) Functor(ΛೋഒʹͰ͖Δ)
Ϟφυ(Monad)Λ࡞ͬͯΈΔ ‣ MayBeϞφυ,IOϞφυΛ࡞ͬͯΈΔ ‣ MayBeϞφυ -> NullՄೳੑʹରͯ͠ॲཧߦ͏͔அ͢ΔϞφυ (ଞͷݴޠͰOptional<T>ܕͱݺΕΔΑ͏ͳͭ) ‣ IOϞφυ
-> ෭࡞༻ࠐΈͷॲཧΛ෦Ͱॲཧͤ͞ΔϞφυ
MaybeϞφυ -> nullՄೳੑʹରॲ͢ΔϞφυ ‣ MaybeϞφυ in out த͕nullͩͬͨΒॲཧ͠ͳ͍ nullͰॲཧΛΒͤͳ͍ΈΛσʔλʹ͍ΕΔ த͕ೖͬͯͨΒฦͯ͠ॲཧ
in out
IOϞφυ -> ֎෦͔ΒͷใΠϯϓοτͷ෭࡞༻ʹର͢ΔϞφυ in out ॲཧΛͨͤͯߦ͏ σʔλʹى͜Γ͏Δ෭࡞༻ؚΊͯ࣋ͨͤΔ
શવΘ͔Βͳͯ͘େৎ ‣ ؔܕʹ෭࡞༻ʹରͯ͠ߦ͏͖ߟ͑ํ͕٧Ίࠐ·Ε͍ͯΔ ‣ ؔܕϓϩάϥϛϯάΛ௨ͯ͡ʹ͚ͭΑ͏ ‣ ࣮ʹϞφυΛ࠶ݱ͢Δඞཁશ͘ͳ͍(ͬͯΈ͔͚ͨͬͨͩ) ‣ ͦͯࣗ͠શવΘ͔Γ͖Εͯͳ͍
ؔܕͷߟ͑ํΛֶ΅͏ ‣ ࠶ར༻ੑɺ෭࡞༻ͷগͳ͍ίʔυͷߟ͑ํΛֶ΅͏ ‣ ण໋ͷ͍ɺ൚༻ੑͷߴ͍ϓϩμΫτ࣮ ؔܕΛֶͿՁ͋Δ
ࢀߟϦϯΫ http://www.zsoltnagy.eu/functional-programming-with-es6/ http://moduscreate.com/monad-pattern-for-functional-programming-in-es6/ http://postd.cc/functional-programming-for-javascript-people-1/ https://github.com/KawabataLemon/MonadInJavascript ൃදͰ͔ͭͬͨίʔυ
Thank you