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 S3 TablesとAmazon S3 Metadataを触ってみた / 20250201-jawsug-tochigi-s3tables-s3metadata
kasacchiful
0
170
Amazon S3 TablesとAmazon S3 Metadataを動かしてみた / 20250125-niigata-5min-tech-lt
kasacchiful
0
18
dbt coreとFargateでデータ変換 / 20240928-jawsug-toyama-hokuriku-shinkansen
kasacchiful
1
91
What we keep in mind when migrating from Serverless Framework to AWS CDK and AWS SAM
kasacchiful
1
340
AWSでIcebergを使ってデータウェアハウスを構築してみる / 20240810-jawsug-akita
kasacchiful
0
41
サーバーレスパターンを元にAWS CDKでデータ基盤を構築する / 20240731_classmethod_odyssey_online_build_a_data_infrastructures_using_aws_cdk_based_on_serverless_patterns
kasacchiful
0
490
AWS IoT 1-clickがサービス終了するので、SORACOMに移行した話 / 20240518-jawsug-niigata-iotlt-niigata
kasacchiful
0
270
AWS Application Composerで始める、 サーバーレスなデータ基盤構築 / 20240406-jawsug-hokuriku-shinkansen
kasacchiful
1
580
AWSの各種サービス紹介と活用方法 − AI・ML活用デモを交えて − / 20231208aws-aiml-seminar
kasacchiful
0
540
Other Decks in Programming
See All in Programming
負債になりにくいCSSをデザイナとつくるには?
fsubal
10
2.4k
Kubernetes History Inspector(KHI)を触ってみた
bells17
0
230
Linux && Docker 研修/Linux && Docker training
forrep
24
4.5k
Open source software: how to live long and go far
gaelvaroquaux
0
640
SwiftUIで単方向アーキテクチャを導入して得られた成果
takuyaosawa
0
270
How mixi2 Uses TiDB for SNS Scalability and Performance
kanmo
38
14k
SwiftUI Viewの責務分離
elmetal
PRO
1
240
2024年のWebフロントエンドのふりかえりと2025年
sakito
3
250
なぜイベント駆動が必要なのか - CQRS/ESで解く複雑系システムの課題 -
j5ik2o
12
4.1k
『GO』アプリ データ基盤のログ収集システムコスト削減
mot_techtalk
0
130
Grafana Loki によるサーバログのコスト削減
mot_techtalk
1
130
Rubyで始める関数型ドメインモデリング
shogo_tksk
0
120
Featured
See All Featured
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
30
2.2k
Building a Scalable Design System with Sketch
lauravandoore
461
33k
jQuery: Nuts, Bolts and Bling
dougneiner
63
7.6k
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
226
22k
Reflections from 52 weeks, 52 projects
jeffersonlam
348
20k
Stop Working from a Prison Cell
hatefulcrawdad
267
20k
GitHub's CSS Performance
jonrohan
1030
460k
Why You Should Never Use an ORM
jnunemaker
PRO
55
9.2k
Fireside Chat
paigeccino
34
3.2k
Art, The Web, and Tiny UX
lynnandtonic
298
20k
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Λ࡞ͬͯ ͓͍͍͖ͨͩ͘͠·͠ΐ͏
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠