Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Clojure-Web-Applikationen für Beginner

Clojure-Web-Applikationen für Beginner

Clojure ist eine JVM-Sprache, die das Unmögliche möglich macht: ein tatsächlich in der Praxis von normalsterblichen Entwicklern einsetzbares Lisp.

Neben den Grundlagen von Clojure werden Sie in dieser Session auch lernen, wie man hiermit Web-Anwendungen umsetzen kann. Wenn Sie sich hierbei nicht von den Lisp-typischen Klammern abschrecken lassen, werden Sie schnell sehen, dass der Einsatz einer rein funktionalen Programmiersprache sehr gut zum statuslosen Ansatz von HTTP passt.

Michael Vitz

January 31, 2017
Tweet

More Decks by Michael Vitz

Other Decks in Programming

Transcript

  1. @michaelvitz Clojure > Lisp-Variante auf JVM > Funktionale Sprache >

    Dynamisch typisiert > Immutable Datenstrukturen > komplettes mächtiges Macrosystem
  2. @michaelvitz Datenstrukturen “Hello World" 3 3.14 3/2 \a :first foo

    #“Ch.*se” (“Hello”, :first) [3 4 3] { :name “Michael”, :company “innoQ” } #{3 4 3} true false
  3. @michaelvitz Funktionen (+ 1 2) > 3 (:city {:name “OOP”

    :city “München”}) > “München” (map inc [1 2 3]) > (2 3 4)
  4. @michaelvitz Funktionen (fn [x y] (+ x y)) (def add

    (fn [x y] (+ x y))) (defn add
 [x y] (+ x y))
  5. @michaelvitz Ring: Middleware (defn wrap-logging
 [handler] (fn [request] (print request)


    (let [response (handler request)] (print response) response)))
  6. @michaelvitz Compojure: Handler (def handler (GET “/hello” [] “Hello, world!”))

    (handler {:request-method :get, :uri “/hello”}) > {:body “Hello, world!”} (handler {:request-method :post, :uri “/hello”}) > nil
  7. @michaelvitz Clojure: Macros “(case 3 1 “one” 2 “two” “more”)”

    Reader Text Data Structures (case 3 1 “one” 2 “two” “more”)
  8. @michaelvitz Clojure: Macros Evaluator Data Structures (case 3 1 “one”

    2 “two” “more”) Data Structures (if (= 3 1) “one” (if (= 3 2) “two” “more”))
  9. @michaelvitz Compojure: Macro (GET “/hello” [] “Hello, world!”) (fn [req]

    (if (and (= (:uri req) “/hello”) (= (:request-method req) :get)) {:body “Hello, world!”}))
  10. @michaelvitz Compojure: Routes (def my-routes (routes (GET “/hello” [] “Hello!”)

    (GET “/bye” [] “Bye!”))) (defroutes my-routes (GET “/hello” [] “Hello!”) (GET “/bye” [] “Bye!”))
  11. @michaelvitz Fazit > Funktionale Sprache ideal für Web-App > Verbreitung

    nimmt zu > Libraries anstelle von Frameworks > Community gesund und hilfsbereit
  12. Michael Vitz | @michaelvitz [email protected] innoQ Deutschland GmbH Krischerstr. 100

    40789 Monheim am Rhein Germany Phone: +49 2173 3366-0 www.innoq.com Ohlauer Straße 43 10999 Berlin Germany Ludwigstraße 180 E D-63067 Offenbach Germany Kreuzstr. 16 D-80331 München Germany https://www.innoq.com/de/talks/2017/01/clojure-web-applikationen-oop2017 Danke! Fragen? Kommentare?