Clojure online - IDE, Editor, Compiler, Interpreter

RSS

Führen Sie Clojure-Code online mit SCI, dem Small Clojure Interpreter, aus: Funktionen, Maps, Vektoren, Threading-Makros und Lazy Sequences, direkt im Browser.

ClojureScript via SCI (Scittle 0.8) · Läuft in Ihrem Browser – Ihr Code erreicht nie unsere Server.
main.cljsClojure
Ausgabe

            
        
Ctrl/⌘ + Enter zum Ausführen

Funktionen des Online-Clojure-Compilers (IDE, Editor & Interpreter)

Schreiben, ausführen und testen Sie Clojure-Code kostenlos online. Diese Seite ist Online-Clojure-IDE, Code-Editor, Compiler und Interpreter in einem: Code eingeben, auf „Ausführen“ klicken und sofort die Ausgabe sehen. Alles läuft in Ihrem Browser – nichts zu installieren, kein Konto nötig.

  • Code sofort ausführen: ClojureScript via SCI (Scittle 0.8), Ausgabe nach dem ersten Laden in weniger als einer Sekunde.
  • Code-Editor: Syntaxhervorhebung, Zeilennummern, Klammerzuordnung und automatisches Schließen von Klammern.
  • Klare Fehlermeldungen: Fehlermeldungen und Warnungen erscheinen im Ausgabebereich – genau wie auf Ihrem eigenen Computer.
  • Vollbild: Ctrl/⌘ + Shift + F, anpassbare Schriftgröße, Layout nebeneinander oder untereinander und skalierbare Bereiche.
  • Automatisches Speichern: Ihr Code bleibt in Ihrem Browser gespeichert; laden Sie ihn als main.cljs herunter oder kopieren Sie ihn mit einem Klick.
  • Gefahrlos experimentieren: Ein Zeitlimit und eine Stopp-Schaltfläche beenden Endlosschleifen.
  • Privat: Die Clojure-Laufzeitumgebung läuft auf Ihrem Gerät, Ihr Code wird also nie hochgeladen.
  • Dunkelmodus und Tastenkürzel: Ctrl/⌘ + Enter führt den Code aus.
  • Kostenlos: keine Anmeldung, keine Nutzungslimits.

Weitere Programmiersprachen lernen

So nutzen Sie den Online-Clojure-Compiler

  1. Schreiben Sie Clojure-Code in den Editor oder fügen Sie ihn dort ein. Beispiel zurücksetzen holt das Startprogramm mit einer Fakultät, einer sortierten Liste von Maps, frequencies und einer ->>-Pipeline zurück.
  2. Drücken Sie Ausführen oder Strg + Enter (⌘ + Enter auf dem Mac).
  3. Mit println ausgegebener Text erscheint im Bereich Ausgabe. Nach dem Lauf wird der Wert des letzten Ausdrucks als => ... in lesbarer pr-str-Form ausgegeben. Ist dieser Wert nil, etwa wenn das Programm mit println endet, wird nichts Zusätzliches angezeigt. Fehler werden mit ihrer Meldung angezeigt.
  4. Wählen Sie ein Zeitlimit von 5, 15 oder 60 Sekunden oder drücken Sie Stopp, um einen Lauf vorzeitig zu beenden.

Beim ersten Lauf lädt die Seite den Interpreter herunter, etwa 1 MB. Kopieren und main.cljs sichern Ihren Code, und A−/A+ ändern die Textgröße.

Alles läuft in einem Web Worker in Ihrem Browser. Ihr Code wird nie an einen Server gesendet. Der Editor speichert Ihr letztes Programm automatisch in Ihrem Browser, getrennt für jeden Compiler.

Über Clojure, ClojureScript und SCI

Clojure ist ein modernes Lisp, das auf unveränderlichen Datenstrukturen und funktionaler Programmierung aufbaut. Das ursprüngliche Clojure läuft auf der Java Virtual Machine, und ClojureScript ist die Version, die auf JavaScript abzielt. Diese Seite verwendet Scittle 0.8, das SCI, den Small Clojure Interpreter, für den Browser bündelt. SCI interpretiert Ihren Code direkt mit der Semantik von ClojureScript, ganz ohne JVM oder Build-Tool.

Was unterstützt wird

  • Definitionen und Kontrollfluss: def, defn, fn und #(...)-Literale, let, if, when, cond sowie loop/recur.
  • Persistente Collections: Maps, Vektoren, Sets und Listen, Keywords sowie Destrukturierung in let und in Funktionsargumenten.
  • Sequenzfunktionen, darunter map, filter, reduce, sort-by, group-by und frequencies, außerdem lazy Sequenzen wie range und iterate.
  • Threading-Makros -> und ->> sowie Atoms für verwalteten veränderlichen Zustand.
  • JavaScript-Interop im Stil von ClojureScript, etwa in (js/Math.sqrt 16) oder (.toUpperCase "abc").

Einschränkungen:

  • Keine JVM-Interop. Klassen wie java.util.Date oder Thread gibt es nicht.
  • Kein Leiningen und keine deps.edn. Externe Bibliotheken lassen sich nicht hinzufügen, daher stehen nur der Code im Editor und die eingebauten Namespaces zur Verfügung.
  • Kein Eingabefeld und kein DOM. Definieren Sie Ihre Testdaten im Programm.

Beispiel: Unveränderlichkeit und Threading

(def inventory {:apples 3 :pears 0})
(def restocked (assoc inventory :pears 12))
(println inventory)   ; {:apples 3, :pears 0}  (unverändert)
(println restocked)   ; {:apples 3, :pears 12}

(def counter (atom 0))
(dotimes [_ 5] (swap! counter inc))
(println @counter)    ; 5

(->> [3 8 1 9 4]
     (filter odd?)
     (map #(* % 10))
     (reduce +))      ; => 130

assoc gibt eine neue Map zurück und lässt das Original unverändert. Wenn Sie einen Wert brauchen, der sich im Lauf der Zeit ändert, halten Sie ihn in einem Atom und aktualisieren Sie ihn mit swap!. Der letzte Ausdruck ist eine ->>-Pipeline. Sie reicht den Vektor an jeden Schritt als letztes Argument weiter, und ihr Ergebnis wird als => 130 ausgegeben. Verwenden Sie stattdessen ->, wenn der Wert das erste Argument sein soll, wie bei assoc und update auf einer Map.

Unterschiede zu Clojure auf der JVM und häufige Stolperfallen

  • Zahlen sind JavaScript-Zahlen. Mit der Semantik von ClojureScript gibt es keine Brüche (Ratios) und keine Big Integers. (/ 1 3) liefert 0.3333333333333333, und sehr große Ganzzahlen verlieren an Genauigkeit.
  • Es gibt keinen eigenen Zeichentyp. Ein Zeichenliteral wie \a ist ein String mit einem Buchstaben, daher hat (frequencies "mississippi") String-Schlüssel.
  • Lazy Evaluation verbirgt Seiteneffekte. (map println xs) gibt möglicherweise nichts aus, wenn das Ergebnis nie verwendet wird. Nutzen Sie doseq oder run! für Seiteneffekte.
  • Unendliche Sequenzen. (range) und iterate enden nie, begrenzen Sie sie daher immer mit take. Geben Sie eine unendliche Sequenz aus, läuft das Programm weiter, bis das Zeitlimit es stoppt.
  • println vs. prn. println gibt Strings innerhalb von Collections ohne Anführungszeichen aus. prn behält die Anführungszeichen bei, was Daten leichter lesbar macht.

Häufig gestellte Fragen

Ist das echtes Clojure?

Es ist Clojure-Code, der von SCI mit der Semantik von ClojureScript ausgeführt wird, nicht die JVM-Implementierung. Die Kernsprache, die Collections und die Sequenzbibliothek funktionieren auf dieselbe Weise, sodass sich der meiste reine Clojure-Code unverändert ausführen lässt. Java-Interop und JVM-spezifisches Verhalten funktionieren nicht.

Kann ich Bibliotheken hinzufügen oder eine Projektdatei verwenden?

Nein. Leiningen, deps.edn und Maven-Abhängigkeiten sind nicht verfügbar. Jeder Lauf interpretiert die einzelne Datei im Editor.

Warum heißt die Datei main.cljs?

Weil der Code mit der Semantik von ClojureScript ausgeführt wird. Sie können den Inhalt in eine .clj- oder .cljc-Datei einfügen, solange er sich nicht auf JavaScript-Interop stützt.

Welche anderen Sprachen kann ich ausprobieren?

Der Online-Scheme-Interpreter ist ein weiteres Lisp zum Erkunden. Für JavaScript selbst nutzen Sie den Online-JavaScript-Compiler oder sehen Sie sich alle Online-Compiler an.

Aktualisiert

In die Zwischenablage kopiert