SlideShare une entreprise Scribd logo
1  sur  14
Télécharger pour lire hors ligne
ClojureScript
Jakub Kočí
Clojure(Script)
• 2007 - Clojure
• LISP , funkcionální, dynamický
• hostovaný (JVM, .NET, JS - ClojureScript)
• 2011 - ClojureScript
• Clojure kompilovaný do JavaScriptu
• Browser, NodeJS
Clojure(Script) - syntaxe
;; identifier

(def x 1)

;; => 2

;; functions

(+ 1 2 3)

;; => 6



;; function declaration

(defn sum [a b c]

(+ a b c))



;; function call

(sum 1 2 3)
Clojure(Script) - datové struktury
;; list

(1 2 3 4)



;; vector

[1 2 3 4]



;; map

{:a 1 :b 2 :c 3 :d 4}



;; set

#{1 2 3 :foo :bar}
JavaScripte, přede mnou se neschováš
;; constructor

(def date (js/Date. “2016-09-09"))
(def regexp (js/RegExp. "^foo$"))


;; method calls

(.log js/console "Hello, World!")



;; access properties

(.-name user)
(set! (.-name user) "John")

JavaScripte, přede mnou se neschováš
;; parsing between js objects/arrays and cljs maps/vectors

(def js-object (clj->js {:name "John" :age 20}))

;; => {name: "John", age: "20"}



(def json "{"name": "John", "age": "20"}")

(def cljs-map (js->clj (js/JSON.parse json)))

;; => {:name "John" :age "20"}
;; DOM manipulation

(def box (.getElementById js/document “box"))



(def title (.createElement js/document "span"))

(.appendChild box title)
Reagent + Re-frame jako React + Redux
(def initial-state {:records []

:record {}})



(register-sub :record-query

(fn [db _]

(reaction (:record @db))))


(defn record-form []

(let [record (subscribe [:record-query])]

[:div.record-form

[:input {:type "text"

:value (:title @record)}]

[:button {:type "button"

:on-click #(dispatch [:save-record])} "Save"]]))
Reagent + Re-frame jako React + Redux
(register-handler :save-record

(fn [db _]

(POST

(str backend-url "/records")

{:handler #(dispatch [:save-record-success %1])

:error-handler #(dispatch [:save-record-error %1])

:format :json})

db))



(register-handler :save-record-success

(fn [db [_ record]]

(assoc-in db [:records] (conj (:records db) (js->clj record)))))
Proč je to super?
• Google Closure Library + spousta Clojure funkcí
• Google Closure Compiler
• nepotřebujete HTML ani CSS
• Immutable data
• Figwheel
• Hot-reload
A když to nestačí…
• Material-UI, cljs-react-material-ui
• ClojureScript + Clojure + Datomic = super-full-stack
• React Native
• Om, Om Next, Rum, Quiescent, Omniscient, ale néé,
zase ta únava
Není všechno zlato co se třpití
• syntaxe a funkcionální přemýšlení
• málo zdrojů (oproti JS nesrovnatelně)
• "^{:key index}” a teď to zkus vygúglit
• chybové hlášky
• no je tam ta mezivrstva JavaScriptu
Stále jsem trochu skeptický…
ClojureScript for Skeptics - Derek Slager
Chci to vyzkoušet
• ClojureScript.io
• KLIPSE
• Figwheel
Díky za pozornost
jakub.koci@gmail.com
@jakubkoci
*Jo a taky nabíráme (iOS, web, backend - Scala, Java)
Dotaz na dotazy

Contenu connexe

Similaire à ClojureScript

Keyup presentation about Gulp
Keyup presentation about GulpKeyup presentation about Gulp
Keyup presentation about GulpKeyup
 
Použití Next.js a Reactí UI khinihovny v aplikaci
Použití Next.js a Reactí UI khinihovny v aplikaciPoužití Next.js a Reactí UI khinihovny v aplikaci
Použití Next.js a Reactí UI khinihovny v aplikaciMartin Krištof
 
Czech Sun Training Day 2008 - Java Enterprise System
Czech Sun Training Day 2008 - Java Enterprise SystemCzech Sun Training Day 2008 - Java Enterprise System
Czech Sun Training Day 2008 - Java Enterprise SystemMartin Cerveny
 
Vývoj aplikací pro iOS
Vývoj aplikací pro iOSVývoj aplikací pro iOS
Vývoj aplikací pro iOSPetr Dvorak
 
React premature performance optimization
React premature performance optimizationReact premature performance optimization
React premature performance optimizationMartinKritof1
 
.NET v SQL Serveru
.NET v SQL Serveru.NET v SQL Serveru
.NET v SQL ServeruJan Drozen
 
JavaScript v GTM - Measure Camp Brno 2017
JavaScript v GTM - Measure Camp Brno 2017JavaScript v GTM - Measure Camp Brno 2017
JavaScript v GTM - Measure Camp Brno 2017Michal Blažek
 
Rozšiřujeme jQuery aneb proč si nenapsat plugin?
Rozšiřujeme jQuery aneb proč si nenapsat plugin?Rozšiřujeme jQuery aneb proč si nenapsat plugin?
Rozšiřujeme jQuery aneb proč si nenapsat plugin?Bohdan Ganický
 
Slovak Sun Training Day 2010 - DTrace
Slovak Sun Training Day 2010 - DTraceSlovak Sun Training Day 2010 - DTrace
Slovak Sun Training Day 2010 - DTraceMartin Cerveny
 
Php storm @ phpprague 2016
Php storm @ phpprague 2016Php storm @ phpprague 2016
Php storm @ phpprague 2016Tomáš Fejfar
 
Miroslav Bajtoš - Nativní async/await v Node.js - už tam jsme?
Miroslav Bajtoš - Nativní async/await v Node.js - už tam jsme?Miroslav Bajtoš - Nativní async/await v Node.js - už tam jsme?
Miroslav Bajtoš - Nativní async/await v Node.js - už tam jsme?Develcz
 
Zend Framework 2.0 (ZFMeetup Praha 3.11.2011)
Zend Framework 2.0 (ZFMeetup Praha 3.11.2011)Zend Framework 2.0 (ZFMeetup Praha 3.11.2011)
Zend Framework 2.0 (ZFMeetup Praha 3.11.2011)Martin Hujer
 
Představení Ruby on Rails
Představení Ruby on RailsPředstavení Ruby on Rails
Představení Ruby on Railsigloonet
 
MicroKernel - aneb špatný název pro Helper (5. sraz přátel Symfony v Praze)
MicroKernel - aneb špatný název pro Helper (5. sraz přátel Symfony v Praze)MicroKernel - aneb špatný název pro Helper (5. sraz přátel Symfony v Praze)
MicroKernel - aneb špatný název pro Helper (5. sraz přátel Symfony v Praze)Martin Zeman
 

Similaire à ClojureScript (20)

Django
DjangoDjango
Django
 
Keyup presentation about Gulp
Keyup presentation about GulpKeyup presentation about Gulp
Keyup presentation about Gulp
 
Použití Next.js a Reactí UI khinihovny v aplikaci
Použití Next.js a Reactí UI khinihovny v aplikaciPoužití Next.js a Reactí UI khinihovny v aplikaci
Použití Next.js a Reactí UI khinihovny v aplikaci
 
Clean code
Clean codeClean code
Clean code
 
Czech Sun Training Day 2008 - Java Enterprise System
Czech Sun Training Day 2008 - Java Enterprise SystemCzech Sun Training Day 2008 - Java Enterprise System
Czech Sun Training Day 2008 - Java Enterprise System
 
Drupal Front-end
Drupal Front-endDrupal Front-end
Drupal Front-end
 
Vývoj aplikací pro iOS
Vývoj aplikací pro iOSVývoj aplikací pro iOS
Vývoj aplikací pro iOS
 
React premature performance optimization
React premature performance optimizationReact premature performance optimization
React premature performance optimization
 
.NET v SQL Serveru
.NET v SQL Serveru.NET v SQL Serveru
.NET v SQL Serveru
 
JavaScript v GTM - Measure Camp Brno 2017
JavaScript v GTM - Measure Camp Brno 2017JavaScript v GTM - Measure Camp Brno 2017
JavaScript v GTM - Measure Camp Brno 2017
 
TNPW2-2016-03
TNPW2-2016-03TNPW2-2016-03
TNPW2-2016-03
 
Rozšiřujeme jQuery aneb proč si nenapsat plugin?
Rozšiřujeme jQuery aneb proč si nenapsat plugin?Rozšiřujeme jQuery aneb proč si nenapsat plugin?
Rozšiřujeme jQuery aneb proč si nenapsat plugin?
 
201502.ReinIT.Dev
201502.ReinIT.Dev201502.ReinIT.Dev
201502.ReinIT.Dev
 
TNPW2-2014-03
TNPW2-2014-03TNPW2-2014-03
TNPW2-2014-03
 
Slovak Sun Training Day 2010 - DTrace
Slovak Sun Training Day 2010 - DTraceSlovak Sun Training Day 2010 - DTrace
Slovak Sun Training Day 2010 - DTrace
 
Php storm @ phpprague 2016
Php storm @ phpprague 2016Php storm @ phpprague 2016
Php storm @ phpprague 2016
 
Miroslav Bajtoš - Nativní async/await v Node.js - už tam jsme?
Miroslav Bajtoš - Nativní async/await v Node.js - už tam jsme?Miroslav Bajtoš - Nativní async/await v Node.js - už tam jsme?
Miroslav Bajtoš - Nativní async/await v Node.js - už tam jsme?
 
Zend Framework 2.0 (ZFMeetup Praha 3.11.2011)
Zend Framework 2.0 (ZFMeetup Praha 3.11.2011)Zend Framework 2.0 (ZFMeetup Praha 3.11.2011)
Zend Framework 2.0 (ZFMeetup Praha 3.11.2011)
 
Představení Ruby on Rails
Představení Ruby on RailsPředstavení Ruby on Rails
Představení Ruby on Rails
 
MicroKernel - aneb špatný název pro Helper (5. sraz přátel Symfony v Praze)
MicroKernel - aneb špatný název pro Helper (5. sraz přátel Symfony v Praze)MicroKernel - aneb špatný název pro Helper (5. sraz přátel Symfony v Praze)
MicroKernel - aneb špatný název pro Helper (5. sraz přátel Symfony v Praze)
 

ClojureScript

  • 2. Clojure(Script) • 2007 - Clojure • LISP , funkcionální, dynamický • hostovaný (JVM, .NET, JS - ClojureScript) • 2011 - ClojureScript • Clojure kompilovaný do JavaScriptu • Browser, NodeJS
  • 3. Clojure(Script) - syntaxe ;; identifier
 (def x 1)
 ;; => 2
 ;; functions
 (+ 1 2 3)
 ;; => 6
 
 ;; function declaration
 (defn sum [a b c]
 (+ a b c))
 
 ;; function call
 (sum 1 2 3)
  • 4. Clojure(Script) - datové struktury ;; list
 (1 2 3 4)
 
 ;; vector
 [1 2 3 4]
 
 ;; map
 {:a 1 :b 2 :c 3 :d 4}
 
 ;; set
 #{1 2 3 :foo :bar}
  • 5. JavaScripte, přede mnou se neschováš ;; constructor
 (def date (js/Date. “2016-09-09")) (def regexp (js/RegExp. "^foo$")) 
 ;; method calls
 (.log js/console "Hello, World!")
 
 ;; access properties
 (.-name user) (set! (.-name user) "John")

  • 6. JavaScripte, přede mnou se neschováš ;; parsing between js objects/arrays and cljs maps/vectors
 (def js-object (clj->js {:name "John" :age 20}))
 ;; => {name: "John", age: "20"}
 
 (def json "{"name": "John", "age": "20"}")
 (def cljs-map (js->clj (js/JSON.parse json)))
 ;; => {:name "John" :age "20"} ;; DOM manipulation
 (def box (.getElementById js/document “box"))
 
 (def title (.createElement js/document "span"))
 (.appendChild box title)
  • 7. Reagent + Re-frame jako React + Redux (def initial-state {:records []
 :record {}})
 
 (register-sub :record-query
 (fn [db _]
 (reaction (:record @db)))) 
 (defn record-form []
 (let [record (subscribe [:record-query])]
 [:div.record-form
 [:input {:type "text"
 :value (:title @record)}]
 [:button {:type "button"
 :on-click #(dispatch [:save-record])} "Save"]]))
  • 8. Reagent + Re-frame jako React + Redux (register-handler :save-record
 (fn [db _]
 (POST
 (str backend-url "/records")
 {:handler #(dispatch [:save-record-success %1])
 :error-handler #(dispatch [:save-record-error %1])
 :format :json})
 db))
 
 (register-handler :save-record-success
 (fn [db [_ record]]
 (assoc-in db [:records] (conj (:records db) (js->clj record)))))
  • 9. Proč je to super? • Google Closure Library + spousta Clojure funkcí • Google Closure Compiler • nepotřebujete HTML ani CSS • Immutable data • Figwheel • Hot-reload
  • 10. A když to nestačí… • Material-UI, cljs-react-material-ui • ClojureScript + Clojure + Datomic = super-full-stack • React Native • Om, Om Next, Rum, Quiescent, Omniscient, ale néé, zase ta únava
  • 11. Není všechno zlato co se třpití • syntaxe a funkcionální přemýšlení • málo zdrojů (oproti JS nesrovnatelně) • "^{:key index}” a teď to zkus vygúglit • chybové hlášky • no je tam ta mezivrstva JavaScriptu
  • 12. Stále jsem trochu skeptický… ClojureScript for Skeptics - Derek Slager
  • 13. Chci to vyzkoušet • ClojureScript.io • KLIPSE • Figwheel
  • 14. Díky za pozornost jakub.koci@gmail.com @jakubkoci *Jo a taky nabíráme (iOS, web, backend - Scala, Java) Dotaz na dotazy