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
分解に救われる
Search
valerauko
May 24, 2018
Programming
0
94
分解に救われる
地球はプラに、開発者の脳は複雑な引数指定に襲われてる。両方とも分解で解決できる。
Clojureの引数分解 (parameter destructuring) の軽いご紹介。
valerauko
May 24, 2018
Tweet
Share
More Decks by valerauko
See All by valerauko
CIにどこまで任せるのか?
valerauko
0
180
Reitit使ってみた
valerauko
0
320
Other Decks in Programming
See All in Programming
今、知っておきたい! 生成AIエージェントの世界
elith
3
340
Ruby Pattern Matching
bkuhlmann
0
920
if constexpr文はテンプレート世界のラムダ式である
faithandbrave
2
350
Hanami and htmx
bkuhlmann
0
200
PostmanでAPIの動作確認が楽になった話
h455h1
0
140
GraphQLサーバの構成要素を整理する #ハッカー鮨 #tsukijigraphql / graphql server technology selection
izumin5210
4
550
Ruby Function Composition
bkuhlmann
1
330
二郎系ラーメンのコールで学ぶ AST 解析
memory1994
PRO
7
1.7k
コードレビューで学ぶ!Kotlinオブジェクト指向デザインパターン
akkie76
2
180
GitHub Actionsで泣かないためにやっておきたい設定 / Recommended GHA settings to avoid crying
pinkumohikan
3
500
サイコロで理解する統計的仮説検定の考え方
tatamiya
2
230
Zero Waste, Radical Magic, and Italian Graft – Quarkus Efficiency Secrets
hollycummins
0
220
Featured
See All Featured
Fontdeck: Realign not Redesign
paulrobertlloyd
76
4.9k
A designer walks into a library…
pauljervisheath
199
23k
A Tale of Four Properties
chriscoyier
150
22k
Designing for Performance
lara
601
67k
The Pragmatic Product Professional
lauravandoore
24
5.8k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
273
13k
The Illustrated Children's Guide to Kubernetes
chrisshort
29
46k
5 minutes of I Can Smell Your CMS
philhawksworth
199
19k
Building a Modern Day E-commerce SEO Strategy
aleyda
16
6.4k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
77
41k
Gamification - CAS2011
davidbonilla
76
4.6k
Imperfection Machines: The Place of Print at Facebook
scottboms
258
12k
Transcript
引数で地球を救う 引数分解に惚れてしまった話
Erdos Balint • 株式会社スタディストでTeachme Biz開発 • ビール、⾳楽とプログラミング⼤好き • ⾃然を守ることを意識 @valerauko
⼤⾃然を守るのは⼈類の責任 プラスチック のゴミをなん とかしないと いけない
プラ汚染をなんとかするために u使う量を減らす u捨てる時に分ける uゴミを無害化する
プラ汚染をなんとかするために u使う量を減らす u捨てる時に分ける uゴミを無害化する
プラ汚染をなんとかするために u使う量を減らす u捨てる時に分ける uゴミを無害化する
プラ汚染をなんとかするために u使う量を減らす u捨てる時に分ける uゴミを無害化する 京⼯⼤・慶應の研究者が PETを分解する微⽣物を発⾒
引数が多いとわかりにくい 引数の意味がわからない 引数の必要性もわからない 問題
ハッシュマップを渡してみる 「すべて」は取れないネストされた ハッシュは分解できない 問題
分解に救われる 地球も正気も
羅列を分解 user=> (defn hoge #_=> "&でその他が取れる" #_=> [param1 & others]
#_=> (list param1 others)) #'user/hoge user=> (hoge "fuga" 3.14 42) ("fuga" (3.14 42))
羅列を分解 user=> (defn hoge #_=> "いらない要素は無視できる" #_=> [_ param1 param2]
#_=> (list param1 param2)) #'user/hoge user=> (hoge "fuga" 42 :konkon) (42 :konkon)
羅列を分解 user=> (defn hoge #_=> "ネストされた羅列も分解できる" #_=> [p1 [_ v1]
p2] #_=> (list p1 v1 p2)) #'user/hoge user=> (hoge "fuga" [3.14 42] :konkon) ("fuga" 42 :konkon) user=> (hoge 3.14 "abc" :konkon)
羅列を分解 user=> (defn hoge #_=> ":asで全ても取れる" #_=> [p1 [_ p3
:as meaning] p4] #_=> (list p1 p3 p4 meaning)) #'user/hoge user=> (hoge "fuga" [3.14 42] :konkon) ("fuga" 42 :konkon [3.14 42])
連装連想分解 user=> (def person #_=> {:name "Balint" #_=> :city "Tokyo"
#_=> :like ["Clojure" "beer" #_=> "music" "mobage"]}) #'user/person
連装連想分解 user=> (defn say-hello #_=> "マップから欲しいキーだけ取れる" #_=> [{name :name city
:city}] #_=> (str "Hello " name #_=> ", how is " city "?")) #'user/say-hello user=> (say-hello person) "Hello Balint, how is Tokyo?"
連装連想分解 user=> (defn say-hello #_=> ":orでデフォルト値⼊れられる" #_=> [{name :name :or
{name "Foo"}] #_=> (str "Hello, " name "!")) #'user/say-hello user=> (say-hello {}) "Hello, Foo!"
連装連想分解 user=> (defn say-hello #_=> ":keys :strs :symsで短略に書ける" #_=> [{:keys
[name city]}] #_=> (str "Hello " name #_=> ", how is " city "?")) #'user/say-hello user=> (say-hello person) "Hello Balint, how is Tokyo?"
連装連想分解 user=> (defn say-hello #_=> "好きに組み合わせもできる" #_=> [{:keys [name city]
:or {name "Guest"} #_=> [like :as likes] :like}] #_=> (println (str "Hello, " name "! " #_=> "How is " like " in " city "?")) #_=> likes) #'user/say-hello user=> (say-hello person) Hello, Balint! How is Clojure in Tokyo? ["Clojure" "beer" "music" "mobage"]
必要か? 複雑なデータ構造をその ままで渡して、それぞれ の関数で必要なものだけ 抜けられるので⾮常に便 利。 (def person {"@context" "https://example.com/#ns"
:name ["Erdos" "Balint"] :location {:country "Japan" :city "Tokyo"} :likes ["Clojure" "beer" "music" "mobage"] :work {:company "Studist" :position "Developer"} :skills {:language ["Hungarian" "English" "Japanese"] :code ["Ruby" "Python" "Clojure" "JavaScript" "SQL"]} :refs [{:url "https://balint.erdos.tech" :rel "Website"} {:url "https://github.com/valerauko" :rel "GitHub"} {:url "https://pawoo.net/@valerauko" :rel "Mastodon"}]})
We’re hiring! Ruby on Rails, Vue.js, AWS