Open Source im professionellen Einsatz
Linux-Magazin 01/2010
339

Referenzen

Der in Zeile 71 folgende Ausdruck enthält eine weitere spezielle Datenstruktur: eine Ref. Der Befehl »repeat« wiederholt sein zweites Argument (den leeren Vektor »[]«) so oft, wie im ersten Argument angegeben. Auf dieses Resultat erzeugt dann »ref« eine besondere Referenz, und Clojure bindet sie dann an die Var »world«. In »world« speichert das Programm später die errechneten Werte. Für Clojure sind Daten aber wie gesagt unveränderlich. Es stellt sich die Frage, wie das Programm die Werte dort speichern kann.

Refs sind eine Besonderheit von Clojure, die kompliziertes Locking der Daten durch ein elegantes Transaktions-System ersetzt. Eine Transaktion verändert den Zustand mehrerer Refs in einem Thread, andere Threads bekommen immer einen konsistenten Zustand zu sehen.

Ab Zeile 73 folgen zwei Funktionen, die direkt Java-Klassen verwenden und das Abbild der »world« in einen Grafik-Kontext zeichnen. Die Funktion »make-world-image« demonstriert die Instanziierung eines Objekts der Klasse »BufferedImage« mit dem Befehl »new« - für Java-Programmierer vertraut.

Der Befehl »inc« liefert sein Argument um 1 erhöht zurück, »doseq« realisiert alle Werte der übergebenen Sequence, die ja lazy sein kann, um die hier gewollten Seiteneffekte zu bewirken. »when« funktioniert wie ein »if«, nur ohne »else«. Einen Aufruf einer Java-Methode auf dem Objekt »img« zeigt der Befehl ».setRGB«. Das ist fast das Gleiche wie in nativem Java-Code, nur dass die Methode vor dem Objekt steht. Bei der Erzeugung eines Color-Objekts zeigt das Beispiel etwas syntaktischen Zucker: Statt »(new Objekt)« erlaubt Clojure auch das kürzere »(Objekt.)« mit einem Punkt hinter dem Namen der Klasse.

Agents

Der Ausdruck in Zeile 96 zeigt die dritte besondere Datenstruktur von Clojure in diesem Beispiel: den Agent. Clojure erzeugt Agents, wenn es den Befehl »agent« findet, in diesem Falle einen Agent auf eine leere Map. Agents sind ein anderer Referenztyp und erlauben es, einen Wert asynchron zu ändern. An den Agent schickt ein Programmteil eine Funktion, die dann zu einem späteren Zeitpunkt und in einem separaten Thread ausgeführt wird. In diesem Beispiel verwendet das Programm einen Agent, um asynchron das Neuzeichnen der Welt zu signalisieren.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 5 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Linux-Magazin kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Clojure

    Clojure sieht aus wie Lisp und läuft überall, wo Java installiert ist. Dank praktischer Tools und ausgereifter Bibliotheken ist mit der Sprache auch rasch eine moderne Webanwendung programmiert.

  • Unabhängigkeit: Clojure will ohne Spenden auskommen

    Der Erfinder des Lisp-Dialekts Clojure will sein Projekt künftig ohne Spenden weiterführen.

  • Spenden für Clojure

    Rich Hickey, Erfinder und Hauptentwickler der funktionalen Programmiersprache Clojure, bittet um Spenden, um das Projekt weiter verfolgen zu können.

  • Tux liest

    Das Linux-Magazin nimmt ein englischsprachiges Buch unter die Lupe, das sich mit Ubuntu Server beschäftigt und das Etikett "offizielles Handbuch" trägt. Der zweite Titel ist in Deutsch abgefasst und widmet sich der funktionalen Programmiersprache Clojure.

     

  • Clojure 1.6 stabilisiert Alpha-Features

    Die funktionale, Java-basierte Programmiersprache Clojure, die sich an Lisp orientiert, ist in Version 1.6 erschienen. Einige vormalige Alpha-Features sind nun den Kinderschuhen entwachsen.

comments powered by Disqus

Ausgabe 09/2017

Artikelserien und interessante Workshops aus dem Magazin können Sie hier als Bundle erwerben.