Suche senden
Hochladen
キメるClojure
•
14 gefällt mir
•
7,790 views
Yoshitaka Kawashima
Folgen
みんなでClojureをキメよう!
Weniger lesen
Mehr lesen
Software
Diashow-Anzeige
Melden
Teilen
Diashow-Anzeige
Melden
Teilen
1 von 33
Jetzt herunterladen
Downloaden Sie, um offline zu lesen
Empfohlen
Clojureの世界と実際のWeb開発
Clojureの世界と実際のWeb開発
Tsutomu Yano
関数型プログラミング入門 with OCaml
関数型プログラミング入門 with OCaml
Haruka Oikawa
F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~
Nobuhisa Koizumi
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Koichiro Matsuoka
例外設計における大罪
例外設計における大罪
Takuto Wada
C++ マルチスレッド 入門
C++ マルチスレッド 入門
京大 マイコンクラブ
ADRという考えを取り入れてみて
ADRという考えを取り入れてみて
infinite_loop
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ
増田 亨
Empfohlen
Clojureの世界と実際のWeb開発
Clojureの世界と実際のWeb開発
Tsutomu Yano
関数型プログラミング入門 with OCaml
関数型プログラミング入門 with OCaml
Haruka Oikawa
F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~
Nobuhisa Koizumi
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Koichiro Matsuoka
例外設計における大罪
例外設計における大罪
Takuto Wada
C++ マルチスレッド 入門
C++ マルチスレッド 入門
京大 マイコンクラブ
ADRという考えを取り入れてみて
ADRという考えを取り入れてみて
infinite_loop
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ
増田 亨
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
shinjiigarashi
プログラミング言語Clojureのニャンパスでの活用事例
プログラミング言語Clojureのニャンパスでの活用事例
sohta
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
shigeki_ohtsu
今から始める Lens/Prism
今から始める Lens/Prism
Naoki Aoyama
Effective Modern C++ 勉強会 Item 22
Effective Modern C++ 勉強会 Item 22
Keisuke Fukuda
関数型プログラミングのデザインパターンひとめぐり
関数型プログラミングのデザインパターンひとめぐり
Kazuyuki TAKASE
これから Haskell を書くにあたって
これから Haskell を書くにあたって
Tsuyoshi Matsudate
オブジェクト指向できていますか?
オブジェクト指向できていますか?
Moriharu Ohzu
Scalaで型クラス入門
Scalaで型クラス入門
Makoto Fukuhara
強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話
Yoshitaka Kawashima
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
yoku0825
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
kiki utagawa
Domain Driven Design with the F# type System -- F#unctional Londoners 2014
Domain Driven Design with the F# type System -- F#unctional Londoners 2014
Scott Wlaschin
脱RESTful API設計の提案
脱RESTful API設計の提案
樽八 仲川
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
Yoji Kanno
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
Masatoshi Tada
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
shinjiigarashi
暗号文のままで計算しよう - 準同型暗号入門 -
暗号文のままで計算しよう - 準同型暗号入門 -
MITSUNARI Shigeo
入門Transducers
入門Transducers
sohta
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
Yoshitaka Kawashima
マイクロフレームワークEnkan(とKotowari)ではじめるREPL駆動開発
マイクロフレームワークEnkan(とKotowari)ではじめるREPL駆動開発
Yoshitaka Kawashima
Weitere ähnliche Inhalte
Was ist angesagt?
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
shinjiigarashi
プログラミング言語Clojureのニャンパスでの活用事例
プログラミング言語Clojureのニャンパスでの活用事例
sohta
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
shigeki_ohtsu
今から始める Lens/Prism
今から始める Lens/Prism
Naoki Aoyama
Effective Modern C++ 勉強会 Item 22
Effective Modern C++ 勉強会 Item 22
Keisuke Fukuda
関数型プログラミングのデザインパターンひとめぐり
関数型プログラミングのデザインパターンひとめぐり
Kazuyuki TAKASE
これから Haskell を書くにあたって
これから Haskell を書くにあたって
Tsuyoshi Matsudate
オブジェクト指向できていますか?
オブジェクト指向できていますか?
Moriharu Ohzu
Scalaで型クラス入門
Scalaで型クラス入門
Makoto Fukuhara
強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話
Yoshitaka Kawashima
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
yoku0825
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
kiki utagawa
Domain Driven Design with the F# type System -- F#unctional Londoners 2014
Domain Driven Design with the F# type System -- F#unctional Londoners 2014
Scott Wlaschin
脱RESTful API設計の提案
脱RESTful API設計の提案
樽八 仲川
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
Yoji Kanno
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
Masatoshi Tada
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
shinjiigarashi
暗号文のままで計算しよう - 準同型暗号入門 -
暗号文のままで計算しよう - 準同型暗号入門 -
MITSUNARI Shigeo
入門Transducers
入門Transducers
sohta
Was ist angesagt?
(20)
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
プログラミング言語Clojureのニャンパスでの活用事例
プログラミング言語Clojureのニャンパスでの活用事例
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
今から始める Lens/Prism
今から始める Lens/Prism
Effective Modern C++ 勉強会 Item 22
Effective Modern C++ 勉強会 Item 22
関数型プログラミングのデザインパターンひとめぐり
関数型プログラミングのデザインパターンひとめぐり
これから Haskell を書くにあたって
これから Haskell を書くにあたって
オブジェクト指向できていますか?
オブジェクト指向できていますか?
Scalaで型クラス入門
Scalaで型クラス入門
強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
Domain Driven Design with the F# type System -- F#unctional Londoners 2014
Domain Driven Design with the F# type System -- F#unctional Londoners 2014
脱RESTful API設計の提案
脱RESTful API設計の提案
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
暗号文のままで計算しよう - 準同型暗号入門 -
暗号文のままで計算しよう - 準同型暗号入門 -
入門Transducers
入門Transducers
Andere mochten auch
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
Yoshitaka Kawashima
マイクロフレームワークEnkan(とKotowari)ではじめるREPL駆動開発
マイクロフレームワークEnkan(とKotowari)ではじめるREPL駆動開発
Yoshitaka Kawashima
JobStreamerではじめるJavaBatchのクラウド分散実行
JobStreamerではじめるJavaBatchのクラウド分散実行
Yoshitaka Kawashima
たとえ日本人同士でも必要な異文化理解力
たとえ日本人同士でも必要な異文化理解力
Yoshitaka Kawashima
Javaの進化にともなう運用性の向上はシステム設計にどういう変化をもたらすのか
Javaの進化にともなう運用性の向上はシステム設計にどういう変化をもたらすのか
Yoshitaka Kawashima
既婚プログラマの時間捻出術
既婚プログラマの時間捻出術
Yoshitaka Kawashima
Antifragile Clojure
Antifragile Clojure
Yoshitaka Kawashima
週刊Webサイトのアーキテクチャ
週刊Webサイトのアーキテクチャ
Yoshitaka Kawashima
SIerにとっての越境 @ DevLOVE 199
SIerにとっての越境 @ DevLOVE 199
Yoshitaka Kawashima
で、次は何がくるの? - 第2回 TIS Matsuri
で、次は何がくるの? - 第2回 TIS Matsuri
Yoshitaka Kawashima
Boilerplate vs Magic
Boilerplate vs Magic
Yoshitaka Kawashima
Seasar conference 2015 sa-compojure
Seasar conference 2015 sa-compojure
Yoshitaka Kawashima
元気玉的 分散テスト 実行システム TestStreamer
元気玉的 分散テスト 実行システム TestStreamer
Yoshitaka Kawashima
なぜデータモデリングが重要なのか?
なぜデータモデリングが重要なのか?
Yoshitaka Kawashima
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)
Yoshitaka Kawashima
イマドキのExcelスクショの撮り方
イマドキのExcelスクショの撮り方
Yoshitaka Kawashima
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
Yoshitaka Kawashima
Clojure入門
Clojure入門
Naoyuki Kakuda
Clojureによるログ収集と解析
Clojureによるログ収集と解析
Yoshitaka Kawashima
会社でClojure使ってみて分かったこと
会社でClojure使ってみて分かったこと
Recruit Technologies
Andere mochten auch
(20)
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
マイクロフレームワークEnkan(とKotowari)ではじめるREPL駆動開発
マイクロフレームワークEnkan(とKotowari)ではじめるREPL駆動開発
JobStreamerではじめるJavaBatchのクラウド分散実行
JobStreamerではじめるJavaBatchのクラウド分散実行
たとえ日本人同士でも必要な異文化理解力
たとえ日本人同士でも必要な異文化理解力
Javaの進化にともなう運用性の向上はシステム設計にどういう変化をもたらすのか
Javaの進化にともなう運用性の向上はシステム設計にどういう変化をもたらすのか
既婚プログラマの時間捻出術
既婚プログラマの時間捻出術
Antifragile Clojure
Antifragile Clojure
週刊Webサイトのアーキテクチャ
週刊Webサイトのアーキテクチャ
SIerにとっての越境 @ DevLOVE 199
SIerにとっての越境 @ DevLOVE 199
で、次は何がくるの? - 第2回 TIS Matsuri
で、次は何がくるの? - 第2回 TIS Matsuri
Boilerplate vs Magic
Boilerplate vs Magic
Seasar conference 2015 sa-compojure
Seasar conference 2015 sa-compojure
元気玉的 分散テスト 実行システム TestStreamer
元気玉的 分散テスト 実行システム TestStreamer
なぜデータモデリングが重要なのか?
なぜデータモデリングが重要なのか?
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)
イマドキのExcelスクショの撮り方
イマドキのExcelスクショの撮り方
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
Clojure入門
Clojure入門
Clojureによるログ収集と解析
Clojureによるログ収集と解析
会社でClojure使ってみて分かったこと
会社でClojure使ってみて分かったこと
Ähnlich wie キメるClojure
From Java To Clojure
From Java To Clojure
Kent Ohashi
モダンJavaScript環境構築一歩目
モダンJavaScript環境構築一歩目
大樹 小倉
イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情
takezoe
Re-frame and A-Frame
Re-frame and A-Frame
Kazuhiro Hara
ATN No.2 Scala事始め
ATN No.2 Scala事始め
AdvancedTechNight
Clojure
Clojure
Uehara Junji
Aizu lt tokyo_luxion
Aizu lt tokyo_luxion
Tomoaki Tamura
Clojureで作る"simple"なDSL
Clojureで作る"simple"なDSL
Kent Ohashi
Lisp Tutorial for Pythonista : Day 4
Lisp Tutorial for Pythonista : Day 4
Ransui Iso
Clojureの発表など
Clojureの発表など
Kikuta Go
MoteMote Compiler Plugin
MoteMote Compiler Plugin
yoshiaki iwanaga
第一回社内 Scala 勉強会(一部抜粋)
第一回社内 Scala 勉強会(一部抜粋)
lyrical_logical
Kanazawa.js.Next
Kanazawa.js.Next
dynamis
Scala on Hadoop
Scala on Hadoop
Shinji Tanaka
Java8から17へ
Java8から17へ
onozaty
Groovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみよう
Akira Shimosako
関ジャバ JavaOne Tokyo 2012報告会
関ジャバ JavaOne Tokyo 2012報告会
Koichi Sakata
JavaScriptユーティリティライブラリの紹介
JavaScriptユーティリティライブラリの紹介
Yusuke Hirao
Shibuya.lisp #28: 仮題: R について
Shibuya.lisp #28: 仮題: R について
tnoda
TypeScript 言語処理系ことはじめ
TypeScript 言語処理系ことはじめ
Yu Nobuoka
Ähnlich wie キメるClojure
(20)
From Java To Clojure
From Java To Clojure
モダンJavaScript環境構築一歩目
モダンJavaScript環境構築一歩目
イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情
Re-frame and A-Frame
Re-frame and A-Frame
ATN No.2 Scala事始め
ATN No.2 Scala事始め
Clojure
Clojure
Aizu lt tokyo_luxion
Aizu lt tokyo_luxion
Clojureで作る"simple"なDSL
Clojureで作る"simple"なDSL
Lisp Tutorial for Pythonista : Day 4
Lisp Tutorial for Pythonista : Day 4
Clojureの発表など
Clojureの発表など
MoteMote Compiler Plugin
MoteMote Compiler Plugin
第一回社内 Scala 勉強会(一部抜粋)
第一回社内 Scala 勉強会(一部抜粋)
Kanazawa.js.Next
Kanazawa.js.Next
Scala on Hadoop
Scala on Hadoop
Java8から17へ
Java8から17へ
Groovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみよう
関ジャバ JavaOne Tokyo 2012報告会
関ジャバ JavaOne Tokyo 2012報告会
JavaScriptユーティリティライブラリの紹介
JavaScriptユーティリティライブラリの紹介
Shibuya.lisp #28: 仮題: R について
Shibuya.lisp #28: 仮題: R について
TypeScript 言語処理系ことはじめ
TypeScript 言語処理系ことはじめ
Mehr von Yoshitaka Kawashima
ブルックスのいう銀の弾丸とは何か?
ブルックスのいう銀の弾丸とは何か?
Yoshitaka Kawashima
Are Design Patterns Dead?
Are Design Patterns Dead?
Yoshitaka Kawashima
ソフトウェアにおける 複雑さとは何なのか?
ソフトウェアにおける 複雑さとは何なのか?
Yoshitaka Kawashima
Tackling Complexity
Tackling Complexity
Yoshitaka Kawashima
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
Yoshitaka Kawashima
ソフトウェア開発における『知の高速道路』
ソフトウェア開発における『知の高速道路』
Yoshitaka Kawashima
ソフトウェア設計における 意思決定とそのレビューの秘訣
ソフトウェア設計における 意思決定とそのレビューの秘訣
Yoshitaka Kawashima
本番障害に至る病
本番障害に至る病
Yoshitaka Kawashima
システムダウンのひみつ
システムダウンのひみつ
Yoshitaka Kawashima
Mavenの真実とウソ
Mavenの真実とウソ
Yoshitaka Kawashima
アンチフラジャイルの世界
アンチフラジャイルの世界
Yoshitaka Kawashima
Atomic Architecture
Atomic Architecture
Yoshitaka Kawashima
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
Yoshitaka Kawashima
思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 Fall
思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 Fall
Yoshitaka Kawashima
ウォーターフォールとアジャイルのフェアな比較
ウォーターフォールとアジャイルのフェアな比較
Yoshitaka Kawashima
How to find tech books
How to find tech books
Yoshitaka Kawashima
Antifragile Java - Java Day Tokyo 2017 D1-E1
Antifragile Java - Java Day Tokyo 2017 D1-E1
Yoshitaka Kawashima
Mehr von Yoshitaka Kawashima
(17)
ブルックスのいう銀の弾丸とは何か?
ブルックスのいう銀の弾丸とは何か?
Are Design Patterns Dead?
Are Design Patterns Dead?
ソフトウェアにおける 複雑さとは何なのか?
ソフトウェアにおける 複雑さとは何なのか?
Tackling Complexity
Tackling Complexity
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
ソフトウェア開発における『知の高速道路』
ソフトウェア開発における『知の高速道路』
ソフトウェア設計における 意思決定とそのレビューの秘訣
ソフトウェア設計における 意思決定とそのレビューの秘訣
本番障害に至る病
本番障害に至る病
システムダウンのひみつ
システムダウンのひみつ
Mavenの真実とウソ
Mavenの真実とウソ
アンチフラジャイルの世界
アンチフラジャイルの世界
Atomic Architecture
Atomic Architecture
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 Fall
思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 Fall
ウォーターフォールとアジャイルのフェアな比較
ウォーターフォールとアジャイルのフェアな比較
How to find tech books
How to find tech books
Antifragile Java - Java Day Tokyo 2017 D1-E1
Antifragile Java - Java Day Tokyo 2017 D1-E1
キメるClojure
1.
キメるClojure kawasima
2.
Clojureとは何か どういう特長があるのか?
3.
Clojureならではなこと… 文法 → Lisp方言 イミュータブルなデータ構造
→ HaskellやScalaにもある 遅延評価 → その他多くの関数型言語と同じ CSP(core.async) → golangと同じ Future/Promise → JavaのFutureそのもの Almost nothing in Clojure is new (Clojure Appliedより)
4.
枯れた技術/概念を バランスよく配合した言語 ● Javaとの距離感 型をWrapせず、そのまま使う。 性能が気になるのであれば、Javaで書けばいいさ。 ● Lispとの距離感 ● 括弧の種類を増やす禁断の一手。だが程よく読みやすくなる。 Make reasoned choices (Clojure
Appliedより)
5.
ちょっと準備
6.
Syntax Clojure Ruby String "Clojure"
"Ruby" Keyword :clojure :ruby (Symbol) Numeric 123 (long) 123.0 (double) 22/7 (Ratio) 123 (Integer) 123.0 (Float) 22r/7 (Rational) List (1 2 3) - Vector [1 2 3] [1,2,3] (Array) Set #{1 2 3} Set[1, 2, 3] Map {:a 1 :b "a"} {a: 1, b: "a"} (Hash)
7.
Clojure's S式の読み方 http://www.pixelmonkey.org/wordpress/wp-content/uploads/2014/11/clojure_syntax.png
8.
はい、もう読めますねー
9.
キメてみよう
10.
Clojureはキメると気持ちイイ キマりやすいfeatureをご紹介していきます
11.
Lazy Sequence Lispがキマりやすい 、
Fibonacci sequence (def fib (lazy-cat [0 1] (map + fib (rest fib)))) 再帰と遅延シーケンスの絶妙のハーモニー
12.
こういうロジック fib 0,1,... (rest fib)
1,... fib 0,1,1.. (rest fib) 1,1,.. fib 0,1,1,2... (rest fib) 1,1,2,... fib 0,1,1,2,3... (rest fib) 1,1,2,3,.. fib 0,1,1,2,3,5... (rest fib) 1,1,2,3,5..
13.
get-in 業務アプリ頻出の深いデータ構造を一発でアクセス (get-in ctx [:request
:params :address 2 :prefecture]) => 東京都 {:request {:params {:address [{:prefecture "長崎県"} {:prefecture "大阪府"} {:prefecture "東京都"}]}}}
14.
(update-in ctx [:request
:params :address 2 :prefecture] clojure.string/replace #"府$" "都") {:request {:params {:address [{:prefecture "長崎県"} {:prefecture "大阪都"} {:prefecture "東京都"}]}}} update-in 業務アプリ頻出の深いデータ構造を一発で更新
15.
そんなの他の言語でもできるよ =>ctx[:request][:params][:address][2][:prefecture]
16.
=>ctx[:request][:params][:address][2][:prefecture] NoMethodError: undefined method
`[]' for nil:NilClass from (irb):4 from /usr/bin/irb:11:in `<main>' user => (get-in ctx [:request :params :address 2 :prefecture]) nil ruby たどる途中でnilになっても、エラーにならない! Clojure
17.
Multimethod データの型や値、属性によって、動的に呼ぶ関数を切り 替えるしくみ HTMLやXMLのパーサ書くときにも、タグや属性でキレ イに処理を分けられるので、キメキメに書ける。
18.
Excelのパース
19.
Threading Macro 関数の呼び出し順を、他の言語と同じようにしてくれる。 これだけでも十分、気持ちいいが… (.toUpperCase (str
(first [:cat :dog :fish]))) (-> [:cat :dog :fish] first str .toUpperCase) ↑が↓のように書ける
20.
"some" threading macro Optionalなんかなくても、やりたいことって、 nilが帰ってきたらそこで処理を抜けてくれることやろ?
21.
promise/deliver Seleniumでパスワードはスクリプトに含めたくない。 ダイアログ開いてパスワード入力されたら、スクリプトを継続
22.
Destructing String kanaSei =
request.getParamter("KANA_SEI"); String kanaMei = request.getParamter("KANA_MEI"); String kanjiSei = request.getParamter("KANJI_SEI"); String kanjiMei = request.getParamter("KANJI_MEI"); String mailUser = request.getParameter("MAIL_USER"); String mailDomain = request.getParameter("MAIL_DOMAIN"); (let [{{:keys [kana-sei kana-mei kanji-sei kanji-mei mail-user mail-domain]} :params} request] (println "Name=" kanji-sei kanji-mei)) こんなコード、よく見かけるけど… そんな代入派も、最小の手数で変数束縛できる
23.
複雑な構造も一発で、束縛できる デフォルト値もセットできる
24.
はい、キマってきましたね
25.
Clojureのライブラリも キマっている
26.
Ring (-> handler (wrap wrap-anti-forgery
(get-in config [:security :anti-forgery] false)) (wrap wrap-flash (get-in config [:session :flash] false)) (wrap wrap-session (:session config false)) (wrap wrap-keyword-params (get-in config [:params :keywordize] false)) (wrap wrap-nested-params (get-in config [:params :nested] false)) (wrap wrap-multipart-params (get-in config [:params :multipart] false)) (wrap wrap-params (get-in config [:params :urlencoded] false)) (wrap wrap-cookies (get-in config [:cookies] false)) (wrap wrap-absolute-redirects (get-in config [:responses :absolute-redirects] false)) (wrap wrap-resource (get-in config [:static :resources] false)) (wrap wrap-file (get-in config [:static :files] false)) (wrap wrap-content-type (get-in config [:responses :content-types] false)) (wrap wrap-default-charset (get-in config [:responses :default-charset] false)) (wrap wrap-not-modified (get-in config [:responses :not-modified-responses] false)) (wrap wrap-x-headers (:security config)) (wrap wrap-hsts (get-in config [:security :hsts] false)) (wrap wrap-ssl-redirect (get-in config [:security :ssl-redirect] false)) (wrap wrap-forwarded-scheme (boolean (:proxy config))) (wrap wrap-forwarded-remote-addr (boolean (:proxy config))))) 統一されたMiddlewareインタフェース
27.
Compojure 2000行のスモールフレームワークSinatraに対し、 Compojureは500行以下 (ringもweavejester先生が設計してることが大きい) (defroutes api-routes (ANY "/token"
[] token-resource) (ANY "/boards" [] boards-resource) (ANY "/board/:board-name" [board-name] (board-resource board-name)) (ANY "/board/:board-name/threads" [board-name] (threads-resource board-name)) (ANY "/thread/:thread-id" [thread-id] (thread-resource (Long/parseLong thread-id))) (ANY "/thread/:thread-id/comments" [thread-id] (comments-resource (Long/parseLong thread-id) 1 nil))) 宣言的にルーティングを書ける。
28.
core.async goのchannlと同じものを簡単に使える http://www.slideshare.net/kawasima/shibuya-jvm-1clojure core.asyncのデザインの素晴らしさは拙作スライドをご覧ください
29.
Liberator REST APIを宣言的に書ける HTTPステータスコードマニアには たまらない
30.
buddy 認証・認可のしくみも美しい API用認証を付け足すのもシンプル
31.
デファクトスタンダードのライブラリが、 ことごとく ➔ 洗練されたデザイン ➔ 小さくて読みやすい ➔ 比較的、仕様が安定している
32.
まとめ
33.
Clojureをキメると気持ちイイ 質の高いライブラリ群はさらに気持ちイイ
Jetzt herunterladen