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
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
生成AIと余白 〜開発スピードが向上した今、何に向き合う?〜
kakehashi
PRO
0
150
AIが実装する時代、人間は仕様と検証を設計する
gotalab555
1
290
Agile Leadership Summit Keynote 2026
m_seki
1
670
AIと新時代を切り拓く。これからのSREとメルカリIBISの挑戦
0gm
2
3.1k
Oracle Cloud Observability and Management Platform - OCI 運用監視サービス概要 -
oracle4engineer
PRO
2
14k
SREじゃなかった僕らがenablingを通じて「SRE実践者」になるまでのリアル / SRE Kaigi 2026
aeonpeople
6
2.6k
CDK対応したAWS DevOps Agentを試そう_20260201
masakiokuda
1
410
私たち準委任PdEは2つのプロダクトに挑戦する ~ソフトウェア、開発支援という”二重”のプロダクトエンジニアリングの実践~ / 20260212 Naoki Takahashi
shift_evolve
PRO
2
200
OCI Database Management サービス詳細
oracle4engineer
PRO
1
7.4k
SREが向き合う大規模リアーキテクチャ 〜信頼性とアジリティの両立〜
zepprix
0
480
2026年、サーバーレスの現在地 -「制約と戦う技術」から「当たり前の実行基盤」へ- /serverless2026
slsops
2
270
登壇駆動学習のすすめ — CfPのネタの見つけ方と書くときに意識していること
bicstone
3
130
Featured
See All Featured
Google's AI Overviews - The New Search
badams
0
910
Practical Orchestrator
shlominoach
191
11k
Designing Powerful Visuals for Engaging Learning
tmiket
0
240
Heart Work Chapter 1 - Part 1
lfama
PRO
5
35k
Automating Front-end Workflow
addyosmani
1371
200k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
340
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
0
1.1k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.6k
Building Applications with DynamoDB
mza
96
6.9k
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
1
57
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
3.6k
The Power of CSS Pseudo Elements
geoffreycrofte
80
6.2k
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