Slide 1

Slide 1 text

ES6࣌୅ͷ ؔ਺ܕϓϩάϥϛϯάೖ໳ @Kawabata_Lemon

Slide 2

Slide 2 text

,BXBCBUB-FNPO ,BXBCBUB@-FNPO !,BXBCBUB@-FNPO - Lead engineer of pairs Div. eureka, Inc. - iOS Engineer

Slide 3

Slide 3 text

- pairs - couples - Subsidiary of match group / IAC

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

Agenda ‣ ؔ਺ܕͱ͸ ‣ ؔ਺ܕ͕Θ͔Δͱ..? ‣ ͚ΕͲ΋෭࡞༻͸ͷ͜Δ ‣ ͚Ͳҙຯ͸͋Δ

Slide 6

Slide 6 text

ؔ਺ܕݴޠͱ͸ ؔ਺ܕϓϩάϥϛϯάͰ͸ϓϩάϥϜͷߏ੒ʹؔ਺Λଟ༻͢ΔͨΊɺ΄ ͱΜͲͷؔ਺ܕݴޠͰ͸ؔ਺ΛୈҰڃΦϒδΣΫτͱͯ͠ѻ͍ɺͦͷཧ ࿦తͳܭࢉϞσϧͱͯ͠ୈҰڃΦϒδΣΫτͱͯ͠ͷؔ਺Λѻ͑ΔϥϜ μܭࢉ΍߲ॻ͖׵͑Λ࠾༻͍ͯ͠Δɻ 8JLJQFEJB

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

ؔ਺ܕݴޠͱ͸ ؔ਺ܕϓϩάϥϛϯάͰ͸ϓϩάϥϜͷߏ੒ʹؔ਺Λଟ༻͢ΔͨΊɺ΄ ͱΜͲͷؔ਺ܕݴޠͰ͸ؔ਺ΛୈҰڃΦϒδΣΫτͱͯ͠ѻ͍ɺͦͷཧ ࿦తͳܭࢉϞσϧͱͯ͠ୈҰڃΦϒδΣΫτͱͯ͠ͷؔ਺Λѻ͑ΔϥϜ μܭࢉ΍߲ॻ͖׵͑Λ࠾༻͍ͯ͠Δɻ 8JLJQFEJB ม਺ʹؔ਺Λ͍ΕΒΕΔ

Slide 9

Slide 9 text

ͲͷݴޠͰֶͿ͔ ECMASCRIPT2015

Slide 10

Slide 10 text

ؔ਺ܕΛֶͿͱ? ‣ ෭࡞༻͕ؾʹͳΔΑ͏ʹͳΔ ɹ-> ίϯςΩετʹΑͬͯ݁Ռ͕ҟͳΔίʔυΛආ͚Δ(lexical) ‣ ࠶ར༻ੑ͕ؾʹͳΔΑ͏ʹͳΔ -> ϓϩάϥϜͱͯ͠ͷϞδϡʔϧੑ -> ςετ͠΍͢͞(Testability)

Slide 11

Slide 11 text

ྫ͑͹͜Μͳίʔυ͕

Slide 12

Slide 12 text

͜͏ͳΓ·͢

Slide 13

Slide 13 text

No content

Slide 14

Slide 14 text

ߟ͑ํΛม͑Δ ‣ ஋ʹରͯ͠Ͳ͏޲͖߹͏͔ ‣ Կճ΍ͬͯ΋ͪΌΜͱಈ͘΋ͷͳͷ͔ ‣ ୅ೖ͢Δ͜ͱ͸෭࡞༻ΛੜΉ

Slide 15

Slide 15 text

ࢀরಁաੑ in out Function ͋Δೖྗʹର͢Δग़ྗ͕ৗʹಉ͡Ͱ͋Δͱ͍͏͜ͱ ෭࡞༻͕ͳ͍ 1 2 (x) => x+1 ͜ͷؔ਺͸ৗʹ౴͕͑1ର1 1 2 (x) => x+1 ͳΜ͔͍΍ͬͯ΋͓ͳ͡ ஋ͱͲ͏޲͖߹͏͔

Slide 16

Slide 16 text

෭࡞༻ʁ ݺͿͨͼʹ݁Ռ͕ҟͳΔ inͱout͕ৗʹಉ͡อূ͕ͳ͍ʂ

Slide 17

Slide 17 text

൚༻ੑ ‣ ࢖͍·ΘͤΔ ‣ ૊Έཱͯͯ࢖͑Δ in out Function in out Function2 Կճ΋࢖͑Δ΋ͷ͔

Slide 18

Slide 18 text

࢖͍·ΘͤΔ ‣ Ϟδϡʔϧͱͯ͠ͷϓϩάϥϜ খ͍͞΋ͷΛ૊Έ߹Θͤͯେ͖ͳ΋ͷΛ࡞Δ Ϩΰͷߟ͑ํ ->

Slide 19

Slide 19 text

୅ೖ͢Δ͜ͱ͸෭࡞༻ΛੜΉ ‣ ͍ͭͲ͜Ͱมߋͨ͠ͷ͔Θ͔Βͳ͘ͳΔ ‣ είʔϓ֎Ͱঢ়ଶΛ࣋ͬͨΓ….

Slide 20

Slide 20 text

ECMASCRIPT2015 ࣌୅Ͱͷؔ਺ܕϓϩάϥϛϯάͰؾΛ͚ͭΔ͜ͱ ‣ ม਺ͷר্͖͛ʹࠔΒͳ͍ͨΊʹlet,constΛ࢖͓͏ let,constʹ͢Δ͜ͱͰ 
 ReferenceErrorΛىͤ͜Δ

Slide 21

Slide 21 text

ECMASCRIPT2015 ࣌୅Ͱͷؔ਺ܕϓϩάϥϛϯάͰؾΛ͚ͭΔ͜ͱ ‣ ॻ͍ͨείʔϓ௨Γͷ࣮ߦΛͤ͞ΔͨΊʹ => Λ࢖͓͏

Slide 22

Slide 22 text

ECMASCRIPT2015 ࣌୅Ͱͷؔ਺ܕϓϩάϥϛϯάͰؾΛ͚ͭΔ͜ͱ ‣ ॻ͍ͨείʔϓ௨Γͷ࣮ߦΛͤ͞ΔͨΊʹ => Λ࢖͓͏ ఆٛ࣌ͷthis ࣮ߦ࣌ͷthis

Slide 23

Slide 23 text

ECMASCRIPT2015 ࣌୅Ͱͷؔ਺ܕϓϩάϥϛϯάͰؾΛ͚ͭΔ͜ͱ ‣ ॻ͍ͨείʔϓ௨Γͷ࣮ߦΛͤ͞ΔͨΊʹ => Λ࢖͓͏ ఆٛ࣌ͷthis ࣮ߦ࣌ͷthis

Slide 24

Slide 24 text

ͦΕͰ΋΍ͬͺΓ෭࡞༻͸෇͖·ͱ͏ ؔ਺ܕݴޠ͸ͲͷΑ͏ʹઓ͖͔ͬͯͨ ‣ Functor, Applicative, MonadͷҙຯΛͳΜͱͳ͘ཧղ͢Δ

Slide 25

Slide 25 text

x f(x) g(f(x) Applicative x f(x) Functor Functor, Applicative, Monadʁ Monad = Functor + Applicative + ػೳ(ܭࢉઓུ) ͷػೳΛ΋ͭσʔλߏ଄ ཁૉʹؔ਺ΛదԠͰ͖Δ ͦΕΛܨ͛ΒΕΔ ஋Λฦ͔͢ ࣍ͷॲཧΛΑ Ϳ͔ʜFUD

Slide 26

Slide 26 text

No content

Slide 27

Slide 27 text

map͸Ϟφυ Applicative(ͪΌΜͱܨ͛ΒΕΔ) Functor(஋ΛೋഒʹͰ͖Δ)

Slide 28

Slide 28 text

Ϟφυ(Monad)Λ࡞ͬͯΈΔ ‣ MayBeϞφυ,IOϞφυΛ࡞ͬͯΈΔ ‣ MayBeϞφυ -> NullՄೳੑʹରͯ͠ॲཧߦ͏͔൑அ͢ΔϞφυ (ଞͷݴޠͰ͸Optionalܕͱݺ͹ΕΔΑ͏ͳ΍ͭ) ‣ IOϞφυ -> ෭࡞༻ࠐΈͷॲཧΛ಺෦Ͱॲཧͤ͞ΔϞφυ

Slide 29

Slide 29 text

MaybeϞφυ -> nullՄೳੑʹରॲ͢ΔϞφυ ‣ MaybeϞφυ in out த਎͕nullͩͬͨΒॲཧ͠ͳ͍ nullͰॲཧΛ૸Βͤͳ͍࢓૊ΈΛσʔλʹ͍ΕΔ த਎͕ೖͬͯͨΒฦͯ͠ॲཧ in out

Slide 30

Slide 30 text

IOϞφυ -> ֎෦͔Βͷ৘ใΠϯϓοτͷ෭࡞༻ʹର͢ΔϞφυ in out ॲཧΛ௚઀΋ͨͤͯߦ͏ σʔλ಺ʹى͜Γ͏Δ෭࡞༻΋ؚΊͯ࣋ͨͤΔ

Slide 31

Slide 31 text

શવΘ͔Βͳͯ͘΋େৎ෉ ‣ ؔ਺ܕʹ͸෭࡞༻ʹରͯ͠ߦ͏΂͖ߟ͑ํ͕٧Ίࠐ·Ε͍ͯΔ ‣ ؔ਺ܕϓϩάϥϛϯάΛ௨ͯ͡਎ʹ͚ͭΑ͏ ‣ ஧࣮ʹϞφυΛ࠶ݱ͢Δඞཁ͸શ͘ͳ͍(΍ͬͯΈ͔͚ͨͬͨͩ) ‣ ͦͯࣗ͠෼΋શવΘ͔Γ͖Εͯͳ͍

Slide 32

Slide 32 text

ؔ਺ܕͷߟ͑ํΛֶ΅͏ ‣ ࠶ར༻ੑɺ෭࡞༻ͷগͳ͍ίʔυͷߟ͑ํΛֶ΅͏ ‣ ण໋ͷ௕͍ɺ൚༻ੑͷߴ͍ϓϩμΫτ࣮૷ ؔ਺ܕΛֶͿՁ஋͸͋Δ

Slide 33

Slide 33 text

ࢀߟϦϯΫ 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 ൃදͰ͔ͭͬͨίʔυ

Slide 34

Slide 34 text

Thank you