Clojure en ligne - IDE, éditeur, compilateur, interpréteur

RSS

Exécutez du code Clojure en ligne avec SCI, le Small Clojure Interpreter : fonctions, maps, vecteurs, macros de threading et séquences paresseuses, directement dans votre navigateur.

ClojureScript via SCI (Scittle 0.8) · S'exécute dans votre navigateur : votre code n'atteint jamais nos serveurs.
main.cljsClojure
Sortie

            
        
Ctrl/⌘ + Enter pour exécuter

Fonctionnalités du compilateur Clojure en ligne (IDE, éditeur & interpréteur)

Écrivez, exécutez et testez du code Clojure en ligne gratuitement. Cette page réunit un IDE Clojure en ligne, un éditeur de code, un compilateur et un interpréteur : saisissez votre code, cliquez sur Exécuter et voyez le résultat immédiatement. Tout s'exécute dans votre navigateur, sans rien à installer ni compte à créer.

  • Exécution instantanée : ClojureScript via SCI (Scittle 0.8), avec un résultat en moins d'une seconde après le premier chargement.
  • Éditeur de code : coloration syntaxique, numéros de ligne, correspondance et fermeture automatique des parenthèses.
  • Erreurs claires : les messages d'erreur et avertissements s'affichent dans le panneau de sortie, comme sur votre propre ordinateur.
  • Plein écran : Ctrl/⌘ + Shift + F, taille de police réglable, disposition côte à côte ou empilée et panneaux redimensionnables.
  • Enregistrement automatique : votre code est conservé dans votre navigateur ; téléchargez-le sous main.cljs ou copiez-le en un clic.
  • Expérimentez sans risque : une limite de temps et un bouton Arrêter interrompent les boucles infinies.
  • Confidentiel : l'environnement d'exécution Clojure tourne sur votre appareil : votre code n'est jamais envoyé.
  • Mode sombre et raccourcis clavier : Ctrl/⌘ + Enter exécute le code.
  • Gratuit : sans inscription, sans limite d'utilisation.

Découvrez d'autres langages de programmation

Comment utiliser le compilateur Clojure en ligne

  1. Écrivez ou collez du code Clojure dans l'éditeur. Réinitialiser l'exemple ramène le programme de départ avec une factorielle, une liste triée de maps, frequencies et un pipeline ->>.
  2. Appuyez sur Exécuter ou utilisez Ctrl + Entrée (⌘ + Entrée sur Mac).
  3. Le texte affiché avec println apparaît dans le panneau Sortie. Après l'exécution, la valeur de la dernière forme est affichée sous la forme => ... dans la représentation lisible pr-str. Si cette valeur est nil, par exemple quand le programme se termine par println, rien de plus n'est affiché. Les erreurs sont affichées avec leur message.
  4. Choisissez une limite de temps de 5, 15 ou 60 secondes, ou appuyez sur Arrêter pour interrompre une exécution plus tôt.

À la première exécution, la page télécharge l'interpréteur, environ 1 Mo. Copier et main.cljs enregistrent votre code, et A−/A+ modifient la taille du texte.

Tout s'exécute dans un Web Worker de votre navigateur. Votre code n'est jamais envoyé à un serveur. L'éditeur enregistre automatiquement votre dernier programme dans votre navigateur, séparément pour chaque compilateur.

À propos de Clojure, ClojureScript et SCI

Clojure est un Lisp moderne construit autour de structures de données immuables et de la programmation fonctionnelle. Le Clojure d'origine s'exécute sur la machine virtuelle Java, et ClojureScript est la version qui cible JavaScript. Cette page utilise Scittle 0.8, qui empaquette SCI, le Small Clojure Interpreter, pour le navigateur. SCI interprète directement votre code avec la sémantique de ClojureScript, sans JVM ni outil de build.

Ce qui est pris en charge

  • Définitions et structures de contrôle : def, defn, fn et littéraux #(...), let, if, when, cond et loop/recur.
  • Collections persistantes : maps, vecteurs, ensembles et listes, mots-clés, et déstructuration dans let et dans les arguments de fonction.
  • Fonctions de séquences, dont map, filter, reduce, sort-by, group-by et frequencies, ainsi que des séquences paresseuses comme range et iterate.
  • Macros de threading -> et ->>, et atoms pour un état mutable géré.
  • Interopérabilité JavaScript à la manière de ClojureScript, comme dans (js/Math.sqrt 16) ou (.toUpperCase "abc").

Limites :

  • Pas d'interopérabilité JVM. Des classes comme java.util.Date ou Thread n'existent pas.
  • Pas de Leiningen ni de deps.edn. Il n'est pas possible d'ajouter des bibliothèques externes : seuls le code de l'éditeur et les espaces de noms intégrés sont disponibles.
  • Pas de zone de saisie ni de DOM. Définissez vos données de test dans le programme.

Exemple pas à pas : immutabilité et threading

(def inventory {:apples 3 :pears 0})
(def restocked (assoc inventory :pears 12))
(println inventory)   ; {:apples 3, :pears 0}  (inchangé)
(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 renvoie une nouvelle map et laisse l'originale inchangée. Quand vous avez besoin d'une valeur qui évolue dans le temps, gardez-la dans un atom et mettez-la à jour avec swap!. La dernière forme est un pipeline ->>. Il fait passer le vecteur à chaque étape comme dernier argument, et son résultat est affiché sous la forme => 130. Utilisez plutôt -> quand la valeur doit être le premier argument, comme avec assoc et update sur une map.

Différences avec Clojure sur la JVM et pièges courants

  • Les nombres sont des nombres JavaScript. Avec la sémantique de ClojureScript, il n'y a ni rationnels ni grands entiers. (/ 1 3) renvoie 0.3333333333333333, et les très grands entiers perdent en précision.
  • Il n'y a pas de type caractère distinct. Un littéral de caractère comme \a est une chaîne d'une lettre, donc (frequencies "mississippi") a des clés de type chaîne.
  • La paresse masque les effets de bord. (map println xs) peut ne rien afficher si le résultat n'est jamais utilisé. Utilisez doseq ou run! pour les effets de bord.
  • Les séquences infinies. (range) et iterate ne se terminent jamais, limitez-les donc toujours avec take. Si vous affichez une séquence infinie, l'exécution continue jusqu'à ce que la limite de temps l'arrête.
  • println ou prn. println affiche les chaînes à l'intérieur des collections sans guillemets. prn conserve les guillemets, ce qui rend les données plus faciles à lire.

Questions fréquentes

Est-ce du vrai Clojure ?

C'est du code Clojure exécuté par SCI avec la sémantique de ClojureScript, et non l'implémentation JVM. Le langage de base, les collections et la bibliothèque de séquences fonctionnent de la même façon, donc la plupart du code Clojure pur s'exécute sans modification. L'interopérabilité Java et les comportements propres à la JVM ne fonctionnent pas.

Puis-je ajouter des bibliothèques ou utiliser un fichier de projet ?

Non. Leiningen, deps.edn et les dépendances Maven ne sont pas disponibles. Chaque exécution interprète le fichier unique de l'éditeur.

Pourquoi le fichier s'appelle-t-il main.cljs ?

Parce que le code s'exécute avec la sémantique de ClojureScript. Vous pouvez coller le contenu dans un fichier .clj ou .cljc, tant qu'il ne repose pas sur l'interopérabilité JavaScript.

Quels autres langages puis-je essayer ?

L'Interpréteur Scheme en ligne est un autre Lisp à explorer. Pour JavaScript lui-même, utilisez le Compilateur JavaScript en ligne, ou consultez tous les compilateurs en ligne.

Mis à jour

Commentaires

Aucune évaluation pour l’instant

Connectez-vous pour noter cet outil.

Partagez une astuce, posez une question ou racontez comment l’outil a fonctionné pour vous.

Aucun commentaire pour l’instant. Soyez le premier à raconter votre expérience.

Copié dans le presse-papiers