Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
ES6時代の関数型プログラミング
Search
Kawabata Kazuki
January 30, 2017
Technology
780
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ES6時代の関数型プログラミング
We Are Javascripters#3 #wajs #javascript
Kawabata Kazuki
January 30, 2017
More Decks by Kawabata Kazuki
See All by Kawabata Kazuki
AIでビットコインとアプリの未来を考えるワークショップ
cab1
0
38
AX時代のナレッジマネジメント.pdf
cab1
0
58
AX時代のオペレーション構築
cab1
0
35
AXを実現するマインドセット
cab1
0
62
Time2Build Kickoff
cab1
0
41
コロナ禍でのチームビルディング
cab1
1
210
Other Decks in Technology
See All in Technology
ウォンテッドリーの最近のプロダクトと技術の紹介
stomk
0
120
触りたくないデータに、どう触るか AI時代のRBACアクセスガバナンス
ivry_presentationmaterials
0
270
10年後、Engineering 行為を剥奪されるとして、わたしたちは、どう、何を創ればいいだろうか。 / If Engineering Is Taken Away in 10 Years, How and What Should We Create?
bitkey
PRO
1
200
AIカンパニーへの転換を支えた、エンジニアの仕事の再定義
kworkdev
PRO
2
1.3k
Persisting Massive Data with Rails ~Designing for 60 billion rows, and fighting the bottlenecks~ Railsで挑む大量データ永続化 〜600億件を永続化するための設計とボトルネックとの戦い〜
occhi
0
730
Local CI × GitHub Actions
gogutan
2
220
しろおびから始める!ログ活用の第一歩
shumei_ito
0
950
AIがコードを書く時代に、エンジニアは何で自分の価値を証明するのか / In an era where AI writes code how do engineers prove their value
carta_engineering
3
1.1k
Webの常識が通じないHTMLメールのダークモード
teamlab
PRO
0
130
JAWSUG TOHOKU 青森支部 「LoGoチャット」のAWS移行で 乗り越えたこと
taketakekaho
0
340
WasmをRustにする
sansantech
PRO
0
260
Optunaの最新リリースv5.0について
pfn
PRO
0
120
Featured
See All Featured
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2.2k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6.1k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.4k
brightonSEO & MeasureFest 2025 - Winning Strategies for Black Friday CRO & PPC - Christian Goodrich
cargoodrich
3
870
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
280
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
220
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Optimising Largest Contentful Paint
csswizardry
37
4k
WCS-LA-2024
lcolladotor
0
890
The Cost Of JavaScript in 2023
addyosmani
55
10k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
570
VelocityConf: Rendering Performance Case Studies
addyosmani
331
25k
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