Submit Search
Upload
Clojureの世界と実際のWeb開発
•
Download as PPTX, PDF
•
12 likes
•
40,629 views
Tsutomu Yano
Follow
Clojureの特徴と、実際のウェブ開発時に使ってる機能や手法などなど。
Read less
Read more
Software
Report
Share
Report
Share
1 of 54
Download now
Recommended
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Koichiro Matsuoka
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
増田 亨
Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版
Masahito Zembutsu
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
Spectacular Future with clojure.spec
Spectacular Future with clojure.spec
Kent Ohashi
ドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したこと
BIGLOBE Inc.
JavaからScala、そしてClojureへ: 実務で活きる関数型プログラミング
JavaからScala、そしてClojureへ: 実務で活きる関数型プログラミング
Kent Ohashi
例外設計における大罪
例外設計における大罪
Takuto Wada
Recommended
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Koichiro Matsuoka
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
増田 亨
Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版
Masahito Zembutsu
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
Spectacular Future with clojure.spec
Spectacular Future with clojure.spec
Kent Ohashi
ドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したこと
BIGLOBE Inc.
JavaからScala、そしてClojureへ: 実務で活きる関数型プログラミング
JavaからScala、そしてClojureへ: 実務で活きる関数型プログラミング
Kent Ohashi
例外設計における大罪
例外設計における大罪
Takuto Wada
Dockerイメージの理解とコンテナのライフサイクル
Dockerイメージの理解とコンテナのライフサイクル
Masahito Zembutsu
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編
Masahito Zembutsu
DockerとPodmanの比較
DockerとPodmanの比較
Akihiro Suda
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
Kumazaki Hiroki
Redisの特徴と活用方法について
Redisの特徴と活用方法について
Yuji Otani
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
Koichi Tanaka
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ
増田 亨
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門
Etsuji Nakai
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
Taku Miyakawa
ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開
Yahoo!デベロッパーネットワーク
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
NTT DATA Technology & Innovation
会社でClojure使ってみて分かったこと
会社でClojure使ってみて分かったこと
Recruit Technologies
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
Masatoshi Tada
DockerコンテナでGitを使う
DockerコンテナでGitを使う
Kazuhiro Suga
オープンソースライセンスの基礎と実務
オープンソースライセンスの基礎と実務
Yutaka Kachi
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
mosa siru
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
増田 亨
ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装
infinite_loop
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
pospome
20160526 依存関係逆転の原則
20160526 依存関係逆転の原則
bonjin6770 Kurosawa
プログラミングのお勉強としてscratchをさわってみた
プログラミングのお勉強としてscratchをさわってみた
HirokiIwanaga
Arachne Unweaved (JP)
Arachne Unweaved (JP)
Ikuru Kanuma
More Related Content
What's hot
Dockerイメージの理解とコンテナのライフサイクル
Dockerイメージの理解とコンテナのライフサイクル
Masahito Zembutsu
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編
Masahito Zembutsu
DockerとPodmanの比較
DockerとPodmanの比較
Akihiro Suda
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
Kumazaki Hiroki
Redisの特徴と活用方法について
Redisの特徴と活用方法について
Yuji Otani
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
Koichi Tanaka
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ
増田 亨
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門
Etsuji Nakai
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
Taku Miyakawa
ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開
Yahoo!デベロッパーネットワーク
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
NTT DATA Technology & Innovation
会社でClojure使ってみて分かったこと
会社でClojure使ってみて分かったこと
Recruit Technologies
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
Masatoshi Tada
DockerコンテナでGitを使う
DockerコンテナでGitを使う
Kazuhiro Suga
オープンソースライセンスの基礎と実務
オープンソースライセンスの基礎と実務
Yutaka Kachi
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
mosa siru
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
増田 亨
ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装
infinite_loop
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
pospome
20160526 依存関係逆転の原則
20160526 依存関係逆転の原則
bonjin6770 Kurosawa
What's hot
(20)
Dockerイメージの理解とコンテナのライフサイクル
Dockerイメージの理解とコンテナのライフサイクル
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編
DockerとPodmanの比較
DockerとPodmanの比較
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
Redisの特徴と活用方法について
Redisの特徴と活用方法について
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
会社でClojure使ってみて分かったこと
会社でClojure使ってみて分かったこと
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
DockerコンテナでGitを使う
DockerコンテナでGitを使う
オープンソースライセンスの基礎と実務
オープンソースライセンスの基礎と実務
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
20160526 依存関係逆転の原則
20160526 依存関係逆転の原則
Similar to Clojureの世界と実際のWeb開発
プログラミングのお勉強としてscratchをさわってみた
プログラミングのお勉強としてscratchをさわってみた
HirokiIwanaga
Arachne Unweaved (JP)
Arachne Unweaved (JP)
Ikuru Kanuma
【B 5】x pages extension library じゃぱ〜〜ん!コミュニティ動向2014ば〜〜ん!
【B 5】x pages extension library じゃぱ〜〜ん!コミュニティ動向2014ば〜〜ん!
Masahiko Sato
今時のオンプレなgithubクローン環境構築
今時のオンプレなgithubクローン環境構築
You&I
働き方が大きく変わった 入社3年目のときのとあるエピソード
働き方が大きく変わった 入社3年目のときのとあるエピソード
Shohei Okada
「Agileごっこ」で終わらせないために(仮)
「Agileごっこ」で終わらせないために(仮)
Taku Yajima
Trelloを使ってサクサク開発してみませんか?_yohhatu
Trelloを使ってサクサク開発してみませんか?_yohhatu
Yoh Nakamura
アウトプットのすすめ
アウトプットのすすめ
KoichiHirai1
Bottle使ってPython学習一緒にはじめませんか?
Bottle使ってPython学習一緒にはじめませんか?
Tatsuya Shinozuka
Letsgo developer 2012 Continuous Delivery
Letsgo developer 2012 Continuous Delivery
Nobuhiro Sue
俺とコミュニティ活動のタスク
俺とコミュニティ活動のタスク
Masayuki KaToH
勉強会の活動内容、目的について
勉強会の活動内容、目的について
Chihiro Naganuma
Jag神戸3(共有用)
Jag神戸3(共有用)
takagig
The History of Groovy #GroovyBase
The History of Groovy #GroovyBase
kyon mm
オブジェクト指向プログラマが今関数型言語を学ばないといけない理由
オブジェクト指向プログラマが今関数型言語を学ばないといけない理由
Kohei Taniguchi
LIGでのDocker活用
LIGでのDocker活用
Hayashi Yuichi
Tokyo.R女子部発表スライド「Rではじめるデータ解析の超基礎」
Tokyo.R女子部発表スライド「Rではじめるデータ解析の超基礎」
tokyorgirls
FirebaseでN高生証明botを作ってみた
FirebaseでN高生証明botを作ってみた
Yoshimura Soichiro
(未発表) JavaScriptテスト勉強会@福岡#0の前に考えていたこと
(未発表) JavaScriptテスト勉強会@福岡#0の前に考えていたこと
Kohki Nakashima
入門書を読み終わったらなにしよう? 〜Python と WebAPI の使い方から学ぶ次の一歩〜 / next-step-python-programing
入門書を読み終わったらなにしよう? 〜Python と WebAPI の使い方から学ぶ次の一歩〜 / next-step-python-programing
Kei IWASAKI
Similar to Clojureの世界と実際のWeb開発
(20)
プログラミングのお勉強としてscratchをさわってみた
プログラミングのお勉強としてscratchをさわってみた
Arachne Unweaved (JP)
Arachne Unweaved (JP)
【B 5】x pages extension library じゃぱ〜〜ん!コミュニティ動向2014ば〜〜ん!
【B 5】x pages extension library じゃぱ〜〜ん!コミュニティ動向2014ば〜〜ん!
今時のオンプレなgithubクローン環境構築
今時のオンプレなgithubクローン環境構築
働き方が大きく変わった 入社3年目のときのとあるエピソード
働き方が大きく変わった 入社3年目のときのとあるエピソード
「Agileごっこ」で終わらせないために(仮)
「Agileごっこ」で終わらせないために(仮)
Trelloを使ってサクサク開発してみませんか?_yohhatu
Trelloを使ってサクサク開発してみませんか?_yohhatu
アウトプットのすすめ
アウトプットのすすめ
Bottle使ってPython学習一緒にはじめませんか?
Bottle使ってPython学習一緒にはじめませんか?
Letsgo developer 2012 Continuous Delivery
Letsgo developer 2012 Continuous Delivery
俺とコミュニティ活動のタスク
俺とコミュニティ活動のタスク
勉強会の活動内容、目的について
勉強会の活動内容、目的について
Jag神戸3(共有用)
Jag神戸3(共有用)
The History of Groovy #GroovyBase
The History of Groovy #GroovyBase
オブジェクト指向プログラマが今関数型言語を学ばないといけない理由
オブジェクト指向プログラマが今関数型言語を学ばないといけない理由
LIGでのDocker活用
LIGでのDocker活用
Tokyo.R女子部発表スライド「Rではじめるデータ解析の超基礎」
Tokyo.R女子部発表スライド「Rではじめるデータ解析の超基礎」
FirebaseでN高生証明botを作ってみた
FirebaseでN高生証明botを作ってみた
(未発表) JavaScriptテスト勉強会@福岡#0の前に考えていたこと
(未発表) JavaScriptテスト勉強会@福岡#0の前に考えていたこと
入門書を読み終わったらなにしよう? 〜Python と WebAPI の使い方から学ぶ次の一歩〜 / next-step-python-programing
入門書を読み終わったらなにしよう? 〜Python と WebAPI の使い方から学ぶ次の一歩〜 / next-step-python-programing
Clojureの世界と実際のWeb開発
1.
オブジェクト指向とは まったく違うClojureの世界と 実際のWeb開発 2018年6月 矢野勉
2.
だれ? 名前: 矢野勉 twitter:
t_yano github: tyano 会社とか: 代表取締役社長 SPEEDA Japan Company プロダクト開発チーム社員 ↑実はいま京都で学生バイト(プログラマ)orプロの開発者募集してます 興味あればどうぞ。
3.
だれ? 開発関係とか: 以前は: Javaメインでやってました。 最近は: 主にClojureメインでやってます 業務もClojureのタスクが中心です。 Clojureのオープンソースのプロジェクトにパッチを送ったり、 Clojure本体の方でもバグ修正のチケット送ったりしてます。
4.
ブログ http://boxofpapers.hatenablog.com
5.
Clojureって聞いたことないな? ・LISP系のプログラミング言語 ・実用寄り! ・Common LISPとかeLispは手続き寄りの言語だけど、Clo ・ホスト言語に乗っかった実装(JVM) ・データは原則としてすべて不変 ・コレクションはだいたい遅延シーケンス https://clojure.org
6.
不変データをmapとかfilterで加工し ていくことでプログラムを作る Data Data Datamap
filter
7.
JVM言語? JVMはホスト言語の一つ ほかにも、Javascriptをホスト言語にしたClojureとか 、.NET CLRをホストにしたClojureがある JVM版に機能が追加されると、ほかのClojureにもち ゃんと機能追加される https://clojurescript.orgClojureScript ClojureCLR https://github.com/clojure/clojure-clr
8.
特徴 まあ、カッコは目立ちますよね… でも、他の言語と比べてカッコが多いわけじゃないんです!
9.
シンプルな言語仕様 [ ] ベクタ。配列。 {
} マップ。連想配列 ( ) 関数呼び出し or 連結リスト #{ } セット
10.
シンプルな言語仕様 (my-great-fn arg1 arg2) 特に注釈がなければ、かっこ
( ) はすべて関数呼び出しです my-great-fn(arg1 arg2) よくあるこれと同じです。
11.
データと関数は はっきり別れている データにメソッドが生えているわけではない データは常に単なるデータであり、それを処理する関数は 何個あってもいいし、 どこにあってもいいし、 誰でも定義できる
12.
“It is better
to have 100 functions operate on one data structure than to have 10 functions operate on 10 data structures” 10種類のデータ構造にそれぞれを扱う 10個の関数があるよりも、ひとつのデー タ構造を扱う100個の関数がある方が良 い
13.
14.
共通のデータ構造 Seq Associative いわゆる「リスト」のようなもの。「先頭」と「残り」で繋がっているなにか。 いわゆる「マップ」「連想配列」のようなもの。キーと値で構成されたもの 多くの関数はこのいずれかを引数に受け取り、 このいずれかを返します First Rest
15.
RDBの結果セット 多くの言語ではResultとかResultSetとかなんらかのクラスが定義されてますが ClojureではただのMapです。 結果セット特有の処理は別途関数として用意すればいいだけなので、 メソッドを生やすためだけにデータ型を定義する必要はないです ただのMapなので、多くのClojure関数がそのまま適用できます。
16.
静的型付けではない ものを定義できるけど、関数はそれらをSeqかAssociativeとして ードで示すために、型ではなく述語を使ったClojure Specとい
17.
データは不変 データは不変だから、プログラム(関数)のやるこ とは、何か不変データを受け取って、それを変換し て返すこと。 ひたすらそれだけ。
18.
ウェブAPIは関数 比喩ではなく ClojureでのWeb API開発では、APIハンドラとは、「 リクエスト」というデータを受け取って 「レスポンス」というデータを返す単なる関数として 実装します。 だからテストを書くのも簡単。 だって本当にただの関数だから、サーバも必要ない。
19.
20.
REPL Driven Development ただの関数だから、ソースをREPLにロードするだけでいつでも実行できる! 関数は引数にしか依存しない コンテナなどの起動が必要ない なんでもREPLに転送してすぐ実行確認しちゃうから テストを書くのが億劫になる問題が…
21.
Web API仕様 Ring https://github.com/ring-clojure/ring PythonのWSGI、RubyのRackのような、HTTPリクエストを処理する仕様 Javaで言えばServlet仕様のようなもの?
22.
Ring仕様 HTTPサーバ (Jetty/http-kit/Alephなどなど) リクエスト・ルーター (Compojure/Ataraxy/Bidiなど) あなたの書いたリクエスト処理関数 Ring Middleware Ring仕様の上にライブラリが 作られている
23.
Ringの定めていること • 大雑把にまとめると、リクエストを処理する「ハンドラ 」関数の引数(リクエスト)と戻り値(レスポンス)の 仕様 • リクエストとレスポンスはただのマップであり、どうい うキーを持っているべきかを定めている •
cookieもheaderもパラメータも、sessionすらも、リクエ ストマップのキーに過ぎない
24.
Ring Middleware リクエストマップを受け取って、マップを書き換え て次のハンドラを呼ぶようなただの関数 HandlerMiddlewareMiddlewareMiddleware
25.
Request Map だいたい以下のようなキーが付いているただのマップ ただし、自由にキーを追加できるので、これだけとは限らない :server-port :server-name :remote-addr :uri :query-string :scheme :request-method :protocol :ssl-client-cert :headers :body :session :cookies
26.
REPL Demo
27.
みんなREPLでコードをガンガン動かしながらプログラムを作っていくので、 REPL開発を支援するIDE機能や ライブラリが発展しています 名前空間にJack Inしたり 変更済みファイルをREPL内で再ロードしたり システム全体をREPLから再起動したり 書いている関数ブロックを丸ごとREPLに転送したり
28.
いま人気があるのは Micro Framework Duct 定義に従ってシステムを依存関係に 合わせて構築したり、ぜんぶ停止したり、一部を変更して再構築したりする 機能を備えています SpringのAutowire、DIみたいな依存性解決だけを抜き出した感じ https://github.com/duct-framework/duct
29.
次は。 遅延シーケンス Lazy Sequence
30.
Clojureのリスト処理関数の大半 は、遅延シーケンスを作ります map filter repeat reduce constantly
31.
無限シーケンスが簡単にできる (iterate inc 0) 0から始めて、1ずつ上がっていく数値の無限シーケンス
32.
遅延シーケンスは、要素を取得す ることでその部分が実体化する (take 5 (iterate
inc 0)) ;; => (0 1 2 3 4) (実際には効率化のために30個程度まとめて実体化されるケースもあります) 1ずつ上がる数値列の先頭5つを取り出す
33.
例えば: (->> (iterate inc
0) (map (fn [v] (println "val = " (* v 2)) v))) 無限の数列だけど、map関数に副作用が入っている(コンソールに値を出力する) take関数などで値を取り出さない限り、コンソールには何も出力されません
34.
これを利用すれば すべては遅延実行されるので RDBへちょっとずつクエリを投げて、最終的に全部 を取るような遅延シーケンス 外部APIからoffset/limitを使って適時データを取って くる遅延シーケンス このように、いろんなものを「遅延シーケンス」という抽象として扱えます。 遅延シーケンスはSeqなので、 共通データ構造Seqを扱えるどの関数でも使えます。
35.
ぜんぶこの構造に乗せられる seq seq seqmap
filter
36.
Clojureでは遅延シーケン スを使いこなすのが肝です 。
37.
プログラムとは、あるデータからリ スト(seq)を作ってmapしたりfilterし たりreduceしたりするもの Clojureでは つまりは 全体がデータ変換関数という だと捉えることができます
38.
ウェブアプリケーションは リクエストマップを受け取って、 レスポンスマップに変換する データ変換関数 関数 リクエスト レスポンス
39.
Simple なんでもSeqかAssociative リクエストをレスポンスに変換する関数を書くだけ REPLでガンガン試す シンプル過ぎて迷うことがあんまりないのです。
40.
ウェブアプリ用技術 Compojure リクエストルーター http-kit Clojure製HTTPサーバ Duct アプリケーションのリソース依存関係定義・構築フレームワー ク Buddy セキュリティ・ライブラリ パスワード暗号化関数や、認証認可のためのRing
Middlewareなどの集まり Cheshire JSONパーサ clj-http httpクライアント clojure.java.jdbc RDB接続
41.
IDE
42.
現状、 Emacs + CIDER が一番人気です。 すでにEmacsに慣れている人はこれでいいと思う。 Emacs苦手な人!ほかにもあります。
43.
• Emacs用のライブラリ • REPL
Driven支援が豊富 • CIDER Jackinで、開発プロジェクトに潜り込む形でREPLを起動できる • リファクタ機能あり • ソースの定義元へのジャンプとか。 the Clojure(Script) Interactive Development Environment that Rocks!
44.
Spacemacs + Clojure Layer Vimmerは Clojure
layer入れると、CIDERも使えます。 vimの皮を被ったEmacs
45.
IDEをくれ! IntelliJ IDEA +
Cursive CursiveはIDEA Plugin。商用開発利用は有料です。 (仕事で使うものなんだから金を払おう!) CIDERではないけど、REPL制御もできるし、当然リファクタやソースジャンプ なども、IDEAの操作でできます。
46.
この3つのどれかを選 ぶのがいいと思います
47.
どのIDEかよりも 大事なこと
48.
Structural Editing 文字ではなく構造を編集する
49.
Clojure(LISP)プログラマは括 弧を道具として使います Clojureのコードには、シンプルな構造がある (defn calc-age [birthday] (let [today
(now) diff (:year (difference birthday today))] diff)) つまり、括弧です。
50.
構造を編集する Slurp(吸い込む) (if has-item?) (do-something
arg1 arg2) ;=> (if has-item? (do-something arg1 arg2)) Barf(追い出す) (let [birthday user-name]) ;=> (let [birthday] user-name) (if has-item? (do-something arg1 arg2)) Delete (if has-item?)→
51.
Structural Editing自体は他の言語でもできるそうですが、 コード自体がリスト構造になっているClojureでは、これの活用で すごく効率が上がります 前述の3つの開発環境では、どれでもこの機能が使えるので、 ぜひ覚えてください (IDEごとに操作方法は異なります)
52.
Clojureの特徴まとめ • シンプルな言語仕様 • (ほぼ)すべてが不変 •
共通データ構造に対してプログラムを書く • データと関数が分離することでいろいろシンプルになる • 遅延シーケンスでなんでもシーケンス化 • REPL Driven Programming • 非同期安全
53.
本当は今日話したかったけど 時間の関係で話せなかったこと 拡張可能な言語Clojure マクロやdeftypeによって、新しい構文を作れる 実は非同期もすごいんです core.asyncを使えば、go-routine/軽量プロセスもいけるんです。
54.
Q&A
Download now