Clojure online - IDE, editor, compilador, interpretador

RSS

Execute código Clojure online com o SCI, o Small Clojure Interpreter: funções, maps, vetores, threading macros e sequências preguiçosas, direto no seu navegador.

ClojureScript via SCI (Scittle 0.8) · Roda no seu navegador, então seu código nunca chega aos nossos servidores.
main.cljsClojure
Saída

            
        
Ctrl/⌘ + Enter para executar

Recursos do compilador Clojure online (IDE, editor & interpretador)

Escreva, execute e teste código Clojure online de graça. Esta página funciona como IDE, editor de código, compilador e interpretador Clojure online, tudo em um: digite seu código, clique em Executar e veja a saída na hora. Tudo roda no seu navegador, sem nada para instalar e sem conta para criar.

  • Execute código na hora: ClojureScript via SCI (Scittle 0.8), com saída em menos de um segundo após o primeiro carregamento.
  • Editor de código: realce de sintaxe, números de linha, correspondência de colchetes e fechamento automático de colchetes.
  • Erros claros: mensagens de erro e avisos aparecem no painel de saída, como apareceriam no seu próprio computador.
  • Tela cheia: Ctrl/⌘ + Shift + F, tamanho de fonte ajustável, layout lado a lado ou empilhado e painéis redimensionáveis.
  • Salvamento automático: seu código fica guardado no seu navegador; baixe-o como main.cljs ou copie-o com um clique.
  • Seguro para experimentar: um limite de tempo e um botão Parar encerram loops infinitos.
  • Privado: o runtime Clojure roda no seu dispositivo, então seu código nunca é enviado.
  • Modo escuro e atalhos de teclado: Ctrl/⌘ + Enter executa o código.
  • Grátis: sem cadastro, sem limites de uso.

Aprenda outras linguagens de programação

Como usar o compilador Clojure online

  1. Escreva ou cole código Clojure no editor. Restaurar exemplo traz de volta o programa inicial com um fatorial, uma lista ordenada de mapas, frequencies e um pipeline com ->>.
  2. Pressione Executar ou use Ctrl + Enter (⌘ + Enter no Mac).
  3. O texto impresso com println aparece no painel Saída. Depois da execução, o valor da última forma é impresso como => ... na forma legível do pr-str. Se esse valor for nil, por exemplo quando o programa termina com println, nada extra é mostrado. Os erros são exibidos com a sua mensagem.
  4. Escolha um limite de tempo de 5, 15 ou 60 segundos, ou pressione Parar para encerrar uma execução antes.

Na primeira execução, a página baixa o interpretador, de cerca de 1 MB. Copiar e main.cljs guardam o seu código, e A−/A+ mudam o tamanho do texto.

Tudo roda em um Web Worker no seu navegador. O seu código nunca é enviado a um servidor. O editor salva automaticamente o seu último programa no navegador, separadamente para cada compilador.

Sobre Clojure, ClojureScript e SCI

Clojure é um Lisp moderno construído em torno de estruturas de dados imutáveis e programação funcional. O Clojure original roda na Java Virtual Machine, e o ClojureScript é a versão que tem o JavaScript como alvo. Esta página usa o Scittle 0.8, que empacota o SCI, o Small Clojure Interpreter, para o navegador. O SCI interpreta o seu código diretamente com a semântica do ClojureScript, sem JVM nem ferramenta de build.

O que é compatível

  • Definições e controle de fluxo: def, defn, fn e literais #(...), let, if, when, cond e loop/recur.
  • Coleções persistentes: mapas, vetores, conjuntos e listas, keywords e desestruturação em let e nos argumentos de funções.
  • Funções de sequência, incluindo map, filter, reduce, sort-by, group-by e frequencies, além de sequências preguiçosas como range e iterate.
  • Macros de encadeamento -> e ->>, e atoms para estado mutável gerenciado.
  • Interoperabilidade com JavaScript no estilo ClojureScript, como em (js/Math.sqrt 16) ou (.toUpperCase "abc").

Limitações:

  • Sem interoperabilidade com a JVM. Classes como java.util.Date ou Thread não existem.
  • Sem Leiningen nem deps.edn. Não é possível adicionar bibliotecas externas, então só estão disponíveis o código do editor e os namespaces embutidos.
  • Sem caixa de entrada e sem DOM. Defina os seus dados de teste no programa.

Exemplo prático: imutabilidade e encadeamento

(def inventory {:apples 3 :pears 0})
(def restocked (assoc inventory :pears 12))
(println inventory)   ; {:apples 3, :pears 0}  (inalterado)
(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 retorna um novo mapa e deixa o original inalterado. Quando você precisa de um valor que muda com o tempo, guarde-o em um atom e atualize-o com swap!. A última forma é um pipeline com ->>. Ele passa o vetor por cada etapa como o último argumento, e o resultado é impresso como => 130. Use -> no lugar quando o valor deve ser o primeiro argumento, como em assoc e update em um mapa.

Diferenças em relação ao Clojure da JVM e armadilhas comuns

  • Os números são números JavaScript. Com a semântica do ClojureScript, não existem razões nem inteiros grandes. (/ 1 3) retorna 0.3333333333333333, e inteiros muito grandes perdem precisão.
  • Não existe um tipo de caractere separado. Um literal de caractere como \a é uma string de uma letra, então (frequencies "mississippi") tem chaves do tipo string.
  • A avaliação preguiçosa esconde efeitos colaterais. (map println xs) pode não imprimir nada se o resultado nunca for usado. Use doseq ou run! para efeitos colaterais.
  • Sequências infinitas. (range) e iterate nunca terminam, então sempre limite-as com take. Se você imprimir uma sequência infinita, a execução continua até o limite de tempo interrompê-la.
  • println vs prn. println imprime strings dentro de coleções sem aspas. prn mantém as aspas, o que deixa os dados mais fáceis de ler.

Perguntas frequentes

Isto é Clojure de verdade?

É código Clojure executado pelo SCI com a semântica do ClojureScript, não a implementação da JVM. A linguagem básica, as coleções e a biblioteca de sequências funcionam do mesmo jeito, então a maior parte do código Clojure puro roda sem alterações. A interoperabilidade com Java e o comportamento específico da JVM não funcionam.

Posso adicionar bibliotecas ou usar um arquivo de projeto?

Não. Leiningen, deps.edn e dependências do Maven não estão disponíveis. Cada execução interpreta o único arquivo do editor.

Por que o arquivo se chama main.cljs?

Porque o código roda com a semântica do ClojureScript. Você pode colar o conteúdo em um arquivo .clj ou .cljc, desde que ele não dependa da interoperabilidade com JavaScript.

Que outras linguagens posso experimentar?

O Interpretador Scheme online é outro Lisp para explorar. Para o próprio JavaScript, use o Compilador JavaScript online ou veja todos os compiladores online.

Atualizado

Copiado para a área de transferência