Version 1.9 • Development: 1.10.0-alpha4 • Extrem seriöse Entwicklung • Nicht "der neuste heisse Scheiss" • Gedacht für professionelle Softwareentwicklung in Unternehmen • Trotzdem nicht langweilig! Rich Hickey
choose Clojure for. The answer is: the nastiest, hardest, toughest kinds of projects possible. Because it's those projects where you need the ability to mold your language towards your problem, not vice versa”
• Die JVM als Host • Clojure-Syntax * "Make the plan, execute the plan, expect the plan to go off the rails . . . Throw away the plan." (Leonard Snart aka. Captain Cold)
Summe • der Quadrate • der ersten k • geraden Zahlen, • die grösser sind als 5 ns = [10,11,12,17,14,2,20,12], k = 4 840 ns = [10,11,12,17,14,2,20,12], k = 8 984 Inspririert durch Venkat Subramaniam * Falls es weniger als k passende Zahlen gibt, nimm alle
int result = 0; int found = 0; for (int i = 0; (i < ns.size() && found < k); i++) { int v = ns.get(i); if (v > 5 && v % 2 == 0) { result += v * v; found++; } } return result; } Ist das Programm korrekt?
return ns.stream() .filter(x -> x % 2 == 0) // die gerade sind .filter(x -> x > 5) // der Zahlen > 5, .mapToInt(x -> x * x) // Quadrate .limit(k) // der ersten k .sum(); // Berechne die Summe } Wie sieht es mit diesem Code aus?
Datenstrukturen • In Clojure ist es idiomatisch eine Map an Stelle von Objekten zu verwenden • Daten werden geholt, transformiert, aggregiert, gespeichert, verschickt, durchsucht, ...
auf den Datenstrukturen operieren • Eine meiner Lieblingsfunktionen: frequencies • Für mich funktioniert Datenzentrierung sehr gut * Größenordnung: 100 Funktionen in der Standardbibliothek
man nicht gut ändern • Permanentes Nachdenken über so viel Kontext • In OOP gibt es Prinzipien und Techniken zur Vermeidung von complecting • SOLID, GRASP, HCLC • TDD
zur Verfügung • Es ist vollkommen idiomatisch Java aus Clojure aufzurufen • Es gibt hervorragende Clojure Wrapper für Java Bibliothekten • Clojure kann auch erben, Interfaces implementieren, ...
help, rather than implementing the feature himself correctly – that is, as a natural part of the entire language [...]. Clojure pisses on everything I’ve ever loved about Lisp [...] Clojure is the False Lisp [...] A Lisp which barfs Java stack traces.” – Stanislav Datskovskiy (http://www.loper-os.org/?p=42)
vor Nebenläufigkeit • Datenzentrierung finde ich einleuchtend • Die Clojure Bibliothek ist toll • Der interaktive Entwicklungsstil liegt mir • Simplicity passt zu meiner Denkweise • OMG Funktionale Programmierung !!!! • Ich habe keine Angst vor Änderungen • Ich kann Clojure vertrauen