Slide 1

Slide 1 text

ClojureScript @alesroubicek #jsDevMeetup

Slide 2

Slide 2 text

No content

Slide 3

Slide 3 text

Clojure

Slide 4

Slide 4 text

Clojure • dynamické vývojové prostředí • datově orientovaný jazyk • Simple by Design • Lisp on JVM • od začátku zamýšlená jako hostovaný jazyk • prvotřídní interop s hostitelskou platformou

Slide 5

Slide 5 text

EDN Typy string "foo" character \f integer 42, 42N floating point 3.14, 3.14M boolean true, false nil nil symbol foo, + keyword :foo, 9:foo

Slide 6

Slide 6 text

EDN Datové struktury list sequential (1 2 3) vector sequential, random access [1 2 3] map associative {:a 1 :b 2} set membership #{:a :b :c}

Slide 7

Slide 7 text

Funkce (println "Hello #jsDevMeetup!")

Slide 8

Slide 8 text

Funkce (println "Hello #jsDevMeetup!") volání funkce parametr

Slide 9

Slide 9 text

Funkce (println "Hello #jsDevMeetup!") list symbol string

Slide 10

Slide 10 text

Definice funkce (defn greet "Returns a friendly greeting" [your-name] (str "Hello, " your-name))

Slide 11

Slide 11 text

Definice funkce (defn greet "Returns a friendly greeting" [your-name] (str "Hello, " your-name)) function name doc string parameters function body

Slide 12

Slide 12 text

A dál? • klíčová slova • operátory • speciální výrazy • direktivy preprocesoru

Slide 13

Slide 13 text

A dál? • klíčová slova • operátory • speciální výrazy • direktivy preprocesoru Zbytečný

Slide 14

Slide 14 text

–Rich Hickey “Clojure is a small language, and intends to remain so”

Slide 15

Slide 15 text

ClojureScript

Slide 16

Slide 16 text

ClojureScript • Dialekt Clojure • Cílí na všechna moderní JS prostředí • BCL • Google Closure Library • cljs.core • cljs.test • cljs.string • Google Closure Compile (gcc)

Slide 17

Slide 17 text

REPL Driven Development • interaktivní vývoj • rychlá zpětná vazba • nástroje • cljs.main • lumo • lein figwheel

Slide 18

Slide 18 text

qlkit • univerzální (client/server) wrapper React.js • stejná syntaxe pro markup a dotazovaní dat • komponenty určují, jaká data v jakém tvaru potřebují

Slide 19

Slide 19 text

core.async • Implementace CSP a Go kanálů jako knihovna • psaní async a paralelních procesů lineárním stylem • základní kámen pro tvorbu robustních systémů

Slide 20

Slide 20 text

transit • knihovna pro přenos rozšiřitelných typů dat (EDN) • enkóduje data do formátu JSON (nebo do MsgPack) • vysoká rychlost parsování v browserech • typová bezpečnost bez ztráty informací a přesnosti

Slide 21

Slide 21 text

spec • specifikace dat pomocí regulárních výrazů • spustitelná dokumentace • typy na steroidech • lepší chybové hlášky • generativní testování • Open-Closed Principle ➡ dopředná kompatibilita

Slide 22

Slide 22 text

⬅ transit ➡

Slide 23

Slide 23 text

Kam dál? • https://clojurescript.org/guides/quick-start • https://medium.com/@conrad_9565/lets-build-a-ui- with-qlkit-and-graph-queries-79b7b118ddac • http://blog.cognitect.com/blog/2014/7/22/transit • https://clojure.org/guides/spec • http://clojure.org/blog/2013/06/28/clojure-core- async-channels.html

Slide 24

Slide 24 text

https://www.meetup.com/TopMonks-Caffe/ 7. 6. - Loft N8 - Nekázanka