Recommended
PDF
で、次は何がくるの? - 第2回 TIS Matsuri
PDF
PDF
Clojure Language Update (2015)
PDF
PPTX
Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)
PPTX
PDF
3日時間をもらったのでTypeScriptを触ってみた
PDF
Async deepdive before de:code
PDF
はじめよう TypeScript - 入門から実践まで - 素の JavaScript とはさようなら!
PPTX
Guide to GraalVM (JJUG CCC 2019 Fall)
PDF
PPTX
PDF
Visual Studioで始めるTypeScript開発入門
PDF
PDF
PDF
TypeScript 型定義ファイルのある開発 TypeScript勉強会 VSハッカソン倶楽部
PDF
PDF
jQuery 対応ライブラリと TypeScript
PDF
PDF
PDF
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
PDF
PPTX
PPTX
JavaScriptで味わう! 関数型プログラミングのメリット!!
PDF
JavaScriptと共に歩いて行く決意をした君へ
PDF
hooks riverpod + state notifier + freezed でのドメイン駆動設計
PDF
PDF
PPTX
PPTX
More Related Content
PDF
で、次は何がくるの? - 第2回 TIS Matsuri
PDF
PDF
Clojure Language Update (2015)
PDF
PPTX
Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)
PPTX
PDF
3日時間をもらったのでTypeScriptを触ってみた
PDF
Async deepdive before de:code
What's hot
PDF
はじめよう TypeScript - 入門から実践まで - 素の JavaScript とはさようなら!
PPTX
Guide to GraalVM (JJUG CCC 2019 Fall)
PDF
PPTX
PDF
Visual Studioで始めるTypeScript開発入門
PDF
PDF
PDF
TypeScript 型定義ファイルのある開発 TypeScript勉強会 VSハッカソン倶楽部
PDF
PDF
jQuery 対応ライブラリと TypeScript
PDF
PDF
PDF
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
PDF
PPTX
PPTX
JavaScriptで味わう! 関数型プログラミングのメリット!!
PDF
JavaScriptと共に歩いて行く決意をした君へ
PDF
hooks riverpod + state notifier + freezed でのドメイン駆動設計
PDF
Viewers also liked
PDF
PPTX
PPTX
PDF
PDF
PDF
JDK9 新機能 (日本語&ショートバージョン) #jjug
PPTX
PPTX
PPTX
java.lang.OutOfMemoryError #渋谷java
PDF
PDF
PDF
PPTX
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
PDF
PDF
Java SE 9の紹介: モジュール・システムを中心に
Similar to 渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
PPTX
PDF
PDF
プログラミング言語Clojureのニャンパスでの活用事例
PDF
PDF
関数型言語テイスティング: Haskell, Scala, Clojure, Elixirを比べて味わう関数型プログラミングの旨さ
PDF
JavaからScala、そしてClojureへ: 実務で活きる関数型プログラミング
PDF
Everyday Life with clojure.spec
PDF
PDF
PDF
Scalaで萌える関数型プログラミング[1.1.RC1]
PDF
PPTX
最新C#動向と関数型言語haskell ~命令型静的プログラミングから関数型動的プログラミングへのシフト~
PDF
Shibuya.lisp #28: 仮題: R について
PDF
Object-Funcational Analysis and design
KEY
Clojure programming-chapter-2
PDF
PDF
PDF
KEY
ODP
More from Yoshitaka Kawashima
PDF
PDF
PDF
Are Design Patterns Dead?
PDF
強いて言えば「集約どう実装するのかな、を考える」な話
PDF
PDF
PDF
PDF
PDF
ソフトウェア設計における 意思決定とそのレビューの秘訣
PDF
PDF
PDF
PDF
PDF
PDF
PDF
思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 Fall
PDF
PDF
PDF
Antifragile Java - Java Day Tokyo 2017 D1-E1
PDF
SIerにとっての越境 @ DevLOVE 199
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure 1. 2. 特長
● Lisp
● 関数型プログラミングのためのもの
● 確固たるプラットフォームと共生する
JVM, .NET, Javascript上でそれらの型,GC,例外機構を利用し
ながら動作する
● Concurrencyのためにデザインされた
http://clojure.org/rationale
3. 4. 5. 6. 7. 8. 複雑 シンプル
状態、オブジェクト状態、オブジェクト 値値
メソッドメソッド 関数、ネームスペース関数、ネームスペース
varvar Managed refsManaged refs
継承、マッチング継承、マッチング ポリモーフィズムポリモーフィズム
文法文法 データデータ
命令的なループ命令的なループ 集合関数集合関数
アクターアクター キューキュー
ORMORM 宣言的なデータ操作宣言的なデータ操作
条件条件 ルールルール
Complex or Simple
9. 10. シンプルなもの 実現方法
値 Final,永続的なコレクション
関数 ステートレスなメソッド
ネームスーペース 言語のサポート
データ Maps,Arrays,SetsやJSON,XML
ポリモーフィズム プロトコル、型クラス
Managed refs ClojureやHaskellのrefs
ルール ライブラリ、Prolog
シンプルさのツールボックス
11. 12. 13. 14. 15. Immutable
すべてがイミュータブル
user => (def a {:name "kawasima":age 39})
#'user/a
user => (def b (assoc a :age 40))
#'user/b
user => a
{:name "kawasima" :age 39}
つまりコレクションに対する破壊的操作はできない
http://gotocon.com/dl/goto-cph-2012/slides/value-of-values.pdf
16. 17. 18. Epochal time model
person person
:age 39
:name "kawasima"
function
このモデルは、Append-onlyデータベースのDatomicでも採用されています。
http://www.datomic.com/
Identity
Pure functions
:age 40
:name "kawasima"
加齢
Values
state state
19. 20. 21. 22. 23. 24. 25. 26. core.async
coroutine-based
user => (def ch (chan))
#'user/ch
user => (go (println (<! ch))) ;; (A)
user => (go (>! ch "hello!"))
hello!
goマクロによって、(A)の部分は、
1. channelから値取り出す
2. 1の値をprintlnに書き出す
という2つのコードブロックに分割される。
27. 28. 29. 30. 31. Get started
Clojure Java
依存性 leiningen Maven
IDE Lighttable
Emacs + cider
Intellij IDEA
NetBeans
LightTable: http://www.lighttable.com
leiningen: http://leiningen.org/
32. 33. 34. 35. 36. React
ReactもClojurescriptから自在に扱える。(JSX不要)
(defn container-view [{:keys [container non-parallel-actions]} owner {:keys [uses-
parallelism?] :as opts}]
(reify
om/IRender
(render [_]
(let [container-id (container-model/id container)
actions (remove :filler-action
(map (fn [action]
(get non-parallel-actions (:step action)
action))
(:actions container)))]
(html
[:div.container-view {:style {:left (str (* 100 (:index container)) "%")}
:id (str "container_" (:index container))}
(om/build-all action actions {:key :step
:opts opts})])))))
https://github.com/omcljs/om
37. 38. 39. 40.