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
NDS_36_RubyCurry
Search
kasacchiful
March 15, 2014
Programming
0
1.4k
NDS_36_RubyCurry
NDS#36 の言語セッションでしゃべった内容です。
kasacchiful
March 15, 2014
Tweet
Share
More Decks by kasacchiful
See All by kasacchiful
Amazon Q Developer for CLIのある生活 / 20250427ai_craft_hacks_niigata1
kasacchiful
1
50
AWSのコンテナサービス / jawsug-akita-aws-container-services
kasacchiful
0
61
データ基盤でのコンテナ活用事例 / jawsug-akita-data-platform-with-container
kasacchiful
0
57
データ基盤でのコンテナ活用事例 / jawsug-niigata21-data-platform-with-container
kasacchiful
0
95
AWSのコンテナサービス / jawsug_niigata21_aws_container_services
kasacchiful
1
83
Amazon S3 TablesとAmazon S3 Metadataを触ってみた / 20250201-jawsug-tochigi-s3tables-s3metadata
kasacchiful
0
290
Amazon S3 TablesとAmazon S3 Metadataを動かしてみた / 20250125-niigata-5min-tech-lt
kasacchiful
0
32
dbt coreとFargateでデータ変換 / 20240928-jawsug-toyama-hokuriku-shinkansen
kasacchiful
1
120
What we keep in mind when migrating from Serverless Framework to AWS CDK and AWS SAM
kasacchiful
1
420
Other Decks in Programming
See All in Programming
「”誤った使い方をすることが困難”な設計」で良いコードの基礎を固めよう / phpcon-odawara-2025
taniguhey
0
180
Amazon CloudWatchの地味だけど強力な機能紹介!
itotsum
0
210
eBPF超入門「o11yに使える」とは (20250424_eBPF_o11y)
thousanda
1
100
The Evolution of the CRuby Build System
kateinoigakukun
1
750
Making TCPSocket.new "Happy"!
coe401_
1
2.5k
ComposeでWebアプリを作る技術
tbsten
0
120
Vibe Coding の話をしよう
schroneko
12
3.4k
サービスレベルを管理してアジャイルを加速しよう!! / slm-accelerate-agility
tomoyakitaura
1
190
Flutterでllama.cppをつかってローカルLLMを試してみた
sakuraidayo
0
110
PHP で学ぶ OAuth 入門
azuki
1
220
タイムゾーンの奥地は思ったよりも闇深いかもしれない
suguruooki
1
790
Youtube Lofier - Chrome拡張開発
ninikoko
0
2.5k
Featured
See All Featured
Producing Creativity
orderedlist
PRO
344
40k
How GitHub (no longer) Works
holman
314
140k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
Typedesign – Prime Four
hannesfritz
41
2.6k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
331
21k
Optimizing for Happiness
mojombo
378
70k
Testing 201, or: Great Expectations
jmmastey
42
7.5k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
104
19k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
14
1.4k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.6k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
Build The Right Thing And Hit Your Dates
maggiecrowley
35
2.7k
Transcript
RubyͷCurryΛ গ͠৯ͯΈͨ ּݪɹʢ@kasacchifulʣ
ࣗݾհ • ּݪɹʢ@kasacchifulʣ • ৽ׁࢢࡏॅ • SIerۈʢΠϯϑϥඋ͕ଟΊʣ • Ruby͕͓ؾʹೖΓ •
VB.NET, Javascript, SQL, PHP, PowerShell
એ
JaSST’14 Niigata • ࣌ɿ20144݄11ʢۚʣ10:00 ʙ 16:50 • ձɿगϝοηɹதձٞࣨ302B • جௐߨԋɿদඌ୩
ప ࢯʮςετͷલʹνʔϜͷݱྗΛσόοά!!ɹɹ ʙݱྗΛܭଌ͠ɼ߹ཧతͳຏ͖ํΛֶͿʙʯ • ϫʔΫγϣοϓɿ૿ా ྱࢠ ࢯʮݱྗͱνʔϜϏϧσΟϯάɹɹɹɹ ʙνʔϜΛ࡞ͬͯɼຏ͍͍ͯͨ͘Ίʹʙʯ • ਃࠐకɿ20144݄4ʢۚʣ • Webɿhttp://jasst.jp/symposium/jasst14niigata.html
Ruby • 19932݄24ੜ·Εɺ1995ެ։ • ΦϒδΣΫτࢦʢ͕ͯ͢ΦϒδΣΫτʣ • ڧ͍ಈతܕ͚ • ެࣜϖʔδɿhttps://www.ruby-lang.org/ja/
Ruby ͷ Curry ͬͯԿʁ
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
ͦͦ Curry ͬͯԿʁ
Curry ʮΧϦʔԽʯͷ͜ͱ ΧϦʔԽ (currying) ͱɺܭࢉػՊֶͷٕ๏ͷҰͭɻ ෳͷҾΛͱΔؔΛɺҾ͕ʮͱͷؔͷ࠷ॳͷ ҾʯͰΓ͕ʮͱͷؔͷΓͷҾΛऔΓ݁Ռ Λฦؔ͢ʯͰ͋ΔΑ͏ͳؔʹ͢Δ͜ͱɻ ʢग़యɿʮΧϦʔԽ -
Wikipediaʯʣ http://ja.wikipedia.org/wiki/%E3%82%AB%E3%83%AA%E3%83%BC%E5%8C%96
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 ͔Β͑Δ
Curry ͓͍͍ͬͯ͠ͷʁ
͓͍͍͖ͨͩ͘͠·͠ΐ͏ ΧϦʔԽ͢Δ͜ͱͰɺطଘͷؔʹҾͷΛ෦ద༻͠ ͯɺผͷؔΛ࡞Δ͜ͱ͕ग़དྷ·͢ɻ ! طଘͷؔͷ࠶ར༻ɹɹɹɹɹʮDRYʯɹ ! ͏·͑͘ɺ͓͍͘͠ͳΓ·͢ɻ
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
ҙ ʮΧϦʔԽʯͱʮ෦ద༻ʯΛؒҧ͑ͳ͍Α͏ʹ ! ΧϦʔԽɿ->(x,y){x/y} Λ ->(x){->(y){x/y}} ʹม͢Δ͜ͱ ෦ద༻ɿҰ෦ͷҾʹΛద༻ͯ͠ɺผͷؔΛͭ͘Δ ͜ͱ
ଞݴޠͰͷ 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
Curry ΛͬͯΈΔ
FizzBuzzͯ͠ΈΔ
·ͱΊ
͓͍͍͠CurryΛ࡞ͬͯ ͓͍͍͖ͨͩ͘͠·͠ΐ͏
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠