Clojure: Funktionale Programmierung für die JVM
()
About this ebook
Related to Clojure
Titles in the series (100)
Einstieg in Google Go Rating: 0 out of 5 stars0 ratingsServiceorientierte Architektur: Anforderungen, Konzeption und Praxiserfahrungen Rating: 0 out of 5 stars0 ratingsTFS 2012 Versionskontrolle: Grundlagen, Check-In Policies und Branch-Modelle Rating: 0 out of 5 stars0 ratingsQualität in IT-Architekturen: Strategie und Planung Rating: 0 out of 5 stars0 ratingsJava EE Security Rating: 0 out of 5 stars0 ratingsSpring: Vier Perspektiven auf Framework und Ökosystem Rating: 0 out of 5 stars0 ratingsNFC: Near Field Communication für Android-Entwickler Rating: 5 out of 5 stars5/5JavaScript für Eclipse-Entwickler: Orion, RAP und GWT Rating: 0 out of 5 stars0 ratingsHTML5 Security Rating: 0 out of 5 stars0 ratingsErfolgreiche Spieleentwicklung: OpenGL, OpenAL und KI Rating: 0 out of 5 stars0 ratingsÜberzeugende Präsentationen: Konzeption, Technik und Design Rating: 0 out of 5 stars0 ratingsHTML5 für Mobile Web Rating: 0 out of 5 stars0 ratingsJava 7: Fork-Join-Framework und Phaser Rating: 0 out of 5 stars0 ratingsSkalierbare Softwaresysteme: Design, Betrieb und Optimierungspotenziale Rating: 0 out of 5 stars0 ratingsJavaScript auf dem Server Rating: 0 out of 5 stars0 ratingsAmazon Web Services für .NET Entwickler Rating: 0 out of 5 stars0 ratingsF#: Ein praktischer Einstieg Rating: 0 out of 5 stars0 ratingsGeolocation mit PHP: Foursquare-API, Google Places & Qype Rating: 0 out of 5 stars0 ratingsIT Wissensmanagement: Theorie und Praxis Rating: 0 out of 5 stars0 ratingsAlgorithmen: Grundlagen und Implementierung Rating: 0 out of 5 stars0 ratingsBPM: Strategien und Anwendungsfälle Rating: 0 out of 5 stars0 ratingsErfolgreiche Spieleentwicklung: OpenCL Rating: 0 out of 5 stars0 ratingsTitanium Mobile: Multi Platform Apps mit JavaScript Rating: 0 out of 5 stars0 ratingsTFS 2012 Anforderungsmanagement: Work Items und Prozessvorlagen Rating: 0 out of 5 stars0 ratingsBig Data: Technologiegrundlagen Rating: 0 out of 5 stars0 ratingsjQuery Mobile - Basics: Basics Rating: 0 out of 5 stars0 ratingsUX Design für Tablet-Websites: Ein Überblick Rating: 0 out of 5 stars0 ratingsBig Data: Executive Briefing Rating: 0 out of 5 stars0 ratingsSharePoint-Entwicklung für Einsteiger Rating: 0 out of 5 stars0 ratingsJava EE 7: Ein Ausblick Rating: 0 out of 5 stars0 ratings
Related ebooks
C# 6.0 – kurz & gut Rating: 5 out of 5 stars5/5C# 8.0 – kurz & gut Rating: 0 out of 5 stars0 ratingsJava 9 Streams Rating: 0 out of 5 stars0 ratingsC# 10 – kurz & gut Rating: 0 out of 5 stars0 ratingsJavaScript für Java-Entwickler Rating: 0 out of 5 stars0 ratingsDSL mit Xtext/Xtend. 4GL mit externem Quellcode Rating: 0 out of 5 stars0 ratingsProgrammieren mit PHP: Grundlagen der Programmierung von Web-Applikationen mit der Skript-Sprache PHP Rating: 0 out of 5 stars0 ratingsC++ – kurz & gut: Aktuell zu C++17 Rating: 4 out of 5 stars4/5JavaScript und TypeScript für C#-Entwickler Rating: 0 out of 5 stars0 ratingsA++ Die kleinste Programmiersprache der Welt: Eine Programmiersprache zum Erlernen der Programmierung Rating: 0 out of 5 stars0 ratingsR – kurz & gut Rating: 0 out of 5 stars0 ratingsJavaScript auf dem Server Rating: 0 out of 5 stars0 ratingsJava – kurz & gut Rating: 0 out of 5 stars0 ratingsDas große Python3 Workbook: Mit vielen Beispielen und Übungen - Programmieren leicht gemacht! Rating: 4 out of 5 stars4/5Angular 2: Moderne Frontends für alle Plattformen entwickeln Rating: 0 out of 5 stars0 ratingsVon A++ nach ARS++: A++ mit einer Schnittstelle zu anderen Programmiersprachen Rating: 0 out of 5 stars0 ratingsSprachenkompendium: Vala, Go und Rust Rating: 0 out of 5 stars0 ratingsOpenLaszlo: schnell + kompakt Rating: 0 out of 5 stars0 ratingsRoutineaufgaben mit Python automatisieren: Praktische Programmierlösungen für Einsteiger Rating: 0 out of 5 stars0 ratingsMQL: Eine hierarchische Abfragesprache mit TypeScript erstellen Rating: 0 out of 5 stars0 ratingsEinstieg in Google Go Rating: 0 out of 5 stars0 ratingsPHP for Office: Automatisierte Dokumentenerstellung mit PHPExcel, PHPWord und PHPPowerPoint Rating: 1 out of 5 stars1/5Programmieren lernen mit A++: Funktional programmieren in Python und Java Rating: 0 out of 5 stars0 ratingsOracle PL/SQL kurz & gut Rating: 4 out of 5 stars4/5Funktionale Programmierung in Java: Eine umfassende Einführung Rating: 0 out of 5 stars0 ratingsAngular: Das Praxisbuch zu Grundlagen und Best Practices Rating: 0 out of 5 stars0 ratingsJavaScript kurz & gut Rating: 3 out of 5 stars3/5Programmieren in TypeScript: Skalierbare JavaScript-Applikationen entwickeln Rating: 0 out of 5 stars0 ratingsDynamic Proxies: Effizient programmieren Rating: 0 out of 5 stars0 ratingsKompaktkurs C# 7 Rating: 0 out of 5 stars0 ratings
Information Technology For You
Zertifizierung für Softwarearchitekten: Ihr Weg zur iSAQB-CPSA-F-Prüfung Rating: 0 out of 5 stars0 ratingsKnigge für Softwarearchitekten. Reloaded Rating: 0 out of 5 stars0 ratingsBlockchain: Praktische Anwendungen, Praktisches Verständnis Rating: 0 out of 5 stars0 ratingsAndroid-Entwicklung für Einsteiger - 20.000 Zeilen unter dem Meer: 2. erweiterte Auflage Rating: 0 out of 5 stars0 ratingsErfolgreich bewerben in der IT - die besten Praxistipps von A wie (Anschreiben) bis Z (wie Zeugnis) Rating: 0 out of 5 stars0 ratingsKompaktes Managementwissen: Die Grunstruktur agiler Prozesse Rating: 0 out of 5 stars0 ratingsAgiles Requirements Engineering und Testen Rating: 0 out of 5 stars0 ratingsBusiness-Intelligence-Lösungen für Unternehmen Rating: 0 out of 5 stars0 ratingsEinplatinencomputer - ein Überblick Rating: 0 out of 5 stars0 ratings
Reviews for Clojure
0 ratings0 reviews
Book preview
Clojure - André Steingress
André Steingress, Silvia Schreier, Tobias Bayer
Clojure
Funktionale Programmierung für die JVM
ISBN: 978-3-86802-512-5
© 2014 entwickler.press
Ein Imprint der Software & Support Media GmbH
1 Clojure – Status quo und Ausblick
Spätestens nach der Einführung des x-ten Sprachfeatures der Haus-und-Hof-Programmiersprache stellt sich die Programmiererin folgende Frage: Gibt es denn keine Sprache, die mit der mindestmöglichen Anzahl von Sprachmerkmalen ihr Auskommen findet, auf diesen aufbaut, anstatt nach und nach Konzepte in die Sprache einzuführen und in vorhandene Schnittstellen zu integrieren? Eine der möglichen Antworten wurde bereits vor etwa fünfzig Jahren am Massachusetts Institute of Technology (MIT) gefunden. John McCarthy ist der gedankliche Vater von Lisp. Mit seinen Ausführungen über das so genannte „Lambda-Kalkül legte er die mathematische Basis für eine der beiden bis dato am längsten in der Praxis existierenden Programmiersprachen. Es gibt kein „reines
Lisp. Vielmehr gibt es unterschiedliche Varianten, die Lisp-Dialekte. Die bekanntesten sind Common Lisp und Scheme. Im Gegensatz zum Aufbau europäischer Informatikstudien hat Lisp im amerikanischen Universitätsumfeld einen fixen Platz in der Ausbildung neben Java, C, C++ und den anderen üblichen Verdächtigen.
Clojure ist ein seit 2007 bestehender Lisp-Dialekt. Der Begriff „Clojure soll auf Closures, Java und Lisp anspielen. „Clojure
dient nicht nur als reiner Bezeichner für die Programmiersprache, sondern umfasst auch die aus mehreren Komponenten bestehende Laufzeitumgebung. Wichtiger Bestandteil ist dabei die REPL (engl. Read-Eval-Print Loop), ein einfaches konsolenähnliches Interface, das die schnelle Ausführung von Clojure-Code erlaubt. Die Laufzeitumgebung setzt dabei auf der JVM auf, generiert also an bestimmten Stellen JVM-kompatiblen Bytecode und kann somit in bestehenden Java-Umgebungen ausgeführt werden.
Clojure 1.6.0 setzt auf JDK 6 auf (1.5.x war mit JDK 5 kompatibel). Clojure-Programme müssen daher mindestens mit dem JRE 6 ausgeführt werden.
LIStProcessing
Lisp steht für LIStProcessing, also Listenverarbeitung. Die Liste hat dabei neben der Verwendung als Datenstruktur in herkömmlichen Java-Programmen (man denke an die java.util.ArrayList) eine besondere Stellung. Listen werden verwendet, um den eigentlichen Code zu formulieren. Wenn man so will, besteht jedes Programm aus einer Menge von Codelisten. Eine Liste repräsentiert zur Laufzeit einen Funktionsaufruf. Damit sind nicht nur Aufrufe im herkömmlichen Sinne gemeint. Clojure ist komplett funktional und verwendet Funktionen beispielsweise auch, um Variablen zu definieren (eine spezielle Form von Funktionen mit Seiteneffekten).
Um dieses Konzept zu verdeutlichen, sehen wir uns folgendes Beispiel an. Dieses Programm führt eine einfache Addition zweier Zahlen durch:
(+ 41 1)
Die runden Klammern umschließen die Elemente der Liste. Das + an erster Stelle ist ein so genanntes Symbol, 41 und 1 sind Zahlen. Symbole und Zahlen werden auch als Skalare (engl. scalars) bezeichnet. Clojure bietet eine Menge an Datentypen und dazugehörige Skalare beziehungsweise Literale (engl. literals): Integers, Floats, rationale Zahlen, Strings, Booleans, reguläre Ausdrücke, Collections etc. Die obige Codezeile stellt einen Funktionsaufruf dar. Zur Laufzeit wird dabei das erste Element der Liste (das Symbol) in einen Funktionsaufruf aufgelöst und die restlichen Elemente der Liste werden als Argumente dieser Funktion mitgegeben. Die Reihenfolge