Slide 1

Slide 1 text

RubyͷCurryΛ গ͠৯΂ͯΈͨ ּݪɹ޺ʢ@kasacchifulʣ

Slide 2

Slide 2 text

ࣗݾ঺հ • ּݪɹ޺ʢ@kasacchifulʣ • ৽ׁࢢࡏॅ • SIerۈ຿ʢΠϯϑϥ੔උ͕ଟΊʣ • Ruby͕͓ؾʹೖΓ • VB.NET, Javascript, SQL, PHP, PowerShell

Slide 3

Slide 3 text

એ఻

Slide 4

Slide 4 text

JaSST’14 Niigata • ೔࣌ɿ2014೥4݄11೔ʢۚʣ10:00 ʙ 16:50 • ձ৔ɿग࡝ϝοηɹதձٞࣨ302B • جௐߨԋɿদඌ୩ ప ࢯʮςετͷલʹνʔϜͷݱ৔ྗΛσόοά!!ɹɹ ʙݱ৔ྗΛܭଌ͠ɼ߹ཧతͳຏ͖ํΛֶͿʙʯ • ϫʔΫγϣοϓɿ૿ా ྱࢠ ࢯʮݱ৔ྗͱνʔϜϏϧσΟϯάɹɹɹɹ ʙνʔϜΛ࡞ͬͯɼຏ͍͍ͯͨ͘Ίʹʙʯ • ਃࠐక੾ɿ2014೥4݄4೔ʢۚʣ • Webɿhttp://jasst.jp/symposium/jasst14niigata.html

Slide 5

Slide 5 text

Ruby • 1993೥2݄24೔ੜ·Εɺ1995೥ެ։ • ΦϒδΣΫτࢦ޲ʢ͢΂͕ͯΦϒδΣΫτʣ • ڧ͍ಈతܕ෇͚ • ެࣜϖʔδɿhttps://www.ruby-lang.org/ja/

Slide 6

Slide 6 text

Ruby ͷ Curry ͬͯԿʁ

Slide 7

Slide 7 text

Ruby ͷ Curry hoge = -> (x,y,z) { x + y * z } ## hoge = lambda {|x,y,z| x + y * z} ͱಉ͡ curry_hoge = hoge.curry ! hoge.call(1,2,3) #=> 7 hoge[2,3,4] #=> 14 ! curry_hoge.call(1).call(2).call(3) #=> 7 curry_hoge[2][3][4] #=> 14

Slide 8

Slide 8 text

ͦ΋ͦ΋ Curry ͬͯԿʁ

Slide 9

Slide 9 text

Curry ʮΧϦʔԽʯͷ͜ͱ ΧϦʔԽ (currying) ͱ͸ɺܭࢉػՊֶ෼໺ͷٕ๏ͷҰͭɻ ෳ਺ͷҾ਺ΛͱΔؔ਺ΛɺҾ਺͕ʮ΋ͱͷؔ਺ͷ࠷ॳͷ Ҿ਺ʯͰ໭Γ஋͕ʮ΋ͱͷؔ਺ͷ࢒ΓͷҾ਺ΛऔΓ݁Ռ Λฦؔ͢਺ʯͰ͋ΔΑ͏ͳؔ਺ʹ͢Δ͜ͱɻ ʢग़యɿʮΧϦʔԽ - Wikipediaʯʣ http://ja.wikipedia.org/wiki/%E3%82%AB%E3%83%AA%E3%83%BC%E5%8C%96

Slide 10

Slide 10 text

Ruby ͷ Curry hoge = ->(x,y,z) { x + y * z } curry_hoge = hoge.curry ## curry_hoge = ->(x) { ->(y) { ->(z) { x + y * z }}} ͱಉ͡ ! ɾProc#curry ͸ Ruby 1.9 ͔Β࢖͑Δ

Slide 11

Slide 11 text

Curry ͓͍͍ͬͯ͠ͷʁ

Slide 12

Slide 12 text

͓͍͍͖ͨͩ͘͠·͠ΐ͏ ΧϦʔԽ͢Δ͜ͱͰɺطଘͷؔ਺ʹҾ਺ͷ஋Λ෦෼ద༻͠ ͯɺผͷؔ਺Λ࡞Δ͜ͱ͕ग़དྷ·͢ɻ ! طଘͷؔ਺ͷ࠶ར༻ɹɹɹɹɹʮDRYʯɹ ! ͏·͘࢖͑͹ɺ͓͍͘͠ͳΓ·͢ɻ

Slide 13

Slide 13 text

Wikipedia ͷྫΛ Ruby Ͱ div = ->(x,y) { x / y } ## currying cdiv = div.curry #=> ->(x) {->(y) { x/ y }} ## partial application inv = cdiv[1.0] #=> ->(y) { 1.0 / y } inv[3] #=> 0.3333333333333333 inv[10] #=> 0.1

Slide 14

Slide 14 text

஫ҙ ʮΧϦʔԽʯͱʮ෦෼ద༻ʯΛؒҧ͑ͳ͍Α͏ʹ ! ΧϦʔԽɿ->(x,y){x/y} Λ ->(x){->(y){x/y}} ʹม׵͢Δ͜ͱ ෦෼ద༻ɿҰ෦ͷҾ਺ʹ஋Λద༻ͯ͠ɺผͷؔ਺Λͭ͘Δ ͜ͱ

Slide 15

Slide 15 text

ଞݴޠͰͷ Curry • ୈҰڃؔ਺Λѻ͑ΔݴޠͰ͋Ε͹ɺΧϦʔԽΛ࣮ࢪ͢Δ ؔ਺Λ࣮૷Մೳɻ • ྫɿLISP, Scheme, F#, Scala, Erlang, Eiffel, Perl, Python, Rݴޠ, Sݴޠ, JavaScript • ϥΠϒϥϦͰɺΧϦʔԽؔ਺Λ࢖͑Δݴޠ΋͋Δ • Groovy ͷ curry ͸෦෼ద༻ͳͷͰ஫ҙ ग़యɿʮΧϦʔԽ - Wikipediaʯ http://ja.wikipedia.org/wiki/%E3%82%AB%E3%83%AA%E3%83%BC%E5%8C%96

Slide 16

Slide 16 text

Curry Λ࢖ͬͯΈΔ

Slide 17

Slide 17 text

FizzBuzzͯ͠ΈΔ

Slide 18

Slide 18 text

·ͱΊ

Slide 19

Slide 19 text

͓͍͍͠CurryΛ࡞ͬͯ ͓͍͍͖ͨͩ͘͠·͠ΐ͏

Slide 20

Slide 20 text

͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠