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
かわばたれもん(KawabataLemon)
January 30, 2017
Technology
1
700
ES6時代の関数型プログラミング
We Are Javascripters#3 #wajs #javascript
かわばたれもん(KawabataLemon)
January 30, 2017
Tweet
Share
More Decks by かわばたれもん(KawabataLemon)
See All by かわばたれもん(KawabataLemon)
コロナ禍でのチームビルディング
kawabatalemon
1
180
Other Decks in Technology
See All in Technology
テストプロセスで大事にしていること #jasstnano
makky_tyuyan
0
160
Janus
bkuhlmann
1
490
Delivering Millions of Messages within seconds @ Duolingo
pelelgrino
0
350
マルチアカウント環境への発見的統制の導入
ch1aki
1
1.3k
自己改善からチームを動かす! 「セルフエンジニアリングマネージャー」のすゝめ
shoota
6
260
Terraformあれやこれ/terraform-this-and-that
emiki
8
1.3k
Google Cloud の AI を支える裏側のインフラを垣間見る!
maroon1st
0
340
「スニダン」開発組織の構造に込めた意図 ~組織作りはパッションや政治ではない!~
rinchsan
3
530
FrontDoorとWebAppsを組み合わせた際のリダイレクト処理の注意点
kenichirokimura
1
500
推しは推せるときに推せ! プロダクトにフィードバックしていこう
nakasho
0
290
プロデザ! BY リクルート vol.18_リクルートのリサーチ実践組織「リサーチブーストコミュニティ」
recruitengineers
PRO
3
270
開発生産性大幅アップ!Postman VS Code拡張機能
nagix
2
370
Featured
See All Featured
Creatively Recalculating Your Daily Design Routine
revolveconf
210
11k
Art, The Web, and Tiny UX
lynnandtonic
289
19k
Robots, Beer and Maslow
schacon
PRO
155
7.9k
Learning to Love Humans: Emotional Interface Design
aarron
267
39k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
116
18k
The Invisible Side of Design
smashingmag
294
49k
How to name files
jennybc
65
93k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
14
1.5k
Code Reviewing Like a Champion
maltzj
514
39k
How to train your dragon (web standard)
notwaldorf
73
5.2k
Rails Girls Zürich Keynote
gr2m
91
13k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
2
3.4k
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