Clojure Tutorial, Teil 4: Organisation in Dateien


Dies ist der vierte Artikel in einer kleinen Serie, die meine ersten Schritte in der neuen funktionalen Programmiersprache Clojure dokumentieren soll. Die Artikel werden in unregelmäßigen Abständen hier publiziert.

Bei der Arbeit mit Clojure ist das Standardvorgehen zur Organisation von Sourcecode das Aufteilen von logischen Einheiten von Funktionen in einzelne Dateien. Die Namespaces der Funktionen sollten diese logische Zusammengehörigkeit wiederspiegeln. Ich habe das ganze mal am Beispiel einer sehr einfachen HTML-Bibliothek ausprobiert.

Datei 1: Hauptprogramm im Namespace FitbitClj.core

(ns FitbitClj.core
  (:use compojure.core
        compojure.handler
        ring.adapter.jetty
        ring.middleware.reload
        ring.middleware.stacktrace
        FitbitClj.html))

; define compojure routes
(site (defroutes test-routes
  (GET "/" {params :params}
    (str (h1 "Testing") (debug (h2 "params") params)))
  (ANY "*" []
    {:status 404, :body "Page not found."})
))

(def app
  (-> (var test-routes)
      (wrap-reload '(FitbitClj.core))
      (wrap-reload '(FitbitClj.html))
      (wrap-stacktrace))
)

(defn dev []
  (run-jetty #'app {:port 8080})
)

Wie man sieht, verwende ich hier Funktionen wie h1 oder debug, um mir ein einige Ausgaben auf einer Webseite anzusehen. Diese Funktionen sind kein Teil von Clojure oder Compojure, sondern selbstgeschrieben und in der Datei FitbitClj/html.clj gespeichert.

Datei 2: HTML-Bibliothek im Namespace FitbitClj.html

(ns
  #^{:author "Carsten Ringe"
     :doc "Simple HTML formatting"}
  FitbitClj.html)

(defn h1
  ([heading] (str "<h1>" heading "</h1>")))

(defn h2
  ([heading] (str "<h2>" heading "</h2>")))

(defn debug
  ([heading elem] (str heading "<pre>" elem "</pre>")))

Damit ist mein Hauptprogramm übersichtlich, während das langatmige Erzeugen des HTML-Markups aus dem Blickfeld versteckt ist.

Weitere Artikel

Renaissance Periodization, Teil 2

Der letzte PR

Fahrrad geklaut

Erstes Review des Sony XZ Premium

Unterschiedliche Sichtweisen

Vorbestellt: Sony Xperia XZ Premium

Giants Run 2017

Gelesen: SciFi Serie 'The Expanse'

Neue Tastatur: Pok3r Vortex RGB

New minecraft survival mod for 1.11.2