freeCodeCamp/guide/portuguese/miscellaneous/what-is-clojure/index.md

3.9 KiB
Raw Blame History

title localeTitle
What Is Clojure O que é Clojure

Clojure é um dialeto de Lisp.

Lisps são uma família totalmente separada de linguagens para linguagens semelhantes a C, como C #, Javascript, Python ou Ruby. Isso significa que Lisps pode parecer estranho para os programadores que estão mais familiarizados com esses idiomas. Essencialmente, ser um Lisp significa que tudo no Clojure é uma lista contendo dados (até chamadas de função!), Ele possui digitação dinâmica e você pode definir macros que permitem manipular seu próprio código. Aqui está um exemplo simples de algum Clojure para você examinar:

   (defn hello-world [] (println "Hello world!")) 

Isso define uma função (usando a macro defn ) chamada hello-world que não recebe entrada ( [] ) e imprime "Hello world!" para o console. Podemos chamá-lo assim:

   (hello-world) 
   ; => Hello world! 
   ;    nil 

Clojure é uma linguagem funcional.

Todas as variáveis no Clojure são imutáveis e não podem ser alteradas usando um operador de atribuição ( = na maioria das linguagens semelhantes ao C) ou por uma função. Todas as funções pretendem ser referencialmente transparentes , o que significa que, se você fornecer a mesma entrada, elas devem fornecer a mesma saída, não importa o quê. O exemplo do hello-world acima é referencialmente transparente - sempre será impresso "Hello world!" não importa o que. Algo que depende de um gerador de números aleatórios não é referencialmente transparente, porque sua saída é aleatória.

  (defn random-function [] 
    (if (> (rand 4) 2)     ; if a random number between 0 and 2 is greater than 2... 
      (println "foo")      ; ...print "foo". otherwise... 
      (println "bar")))    ; ...print "bar" 

Apesar de não ser capaz de alterar variáveis pode parecer um pesadelo, é muito mais fácil do que você pensa, especialmente se a linguagem é baseada em torno dele (como o Clojure é!), E evitar mutações desnecessárias pode tornar seu código muito menos problemático.

O Clojure é executado na Java Virtual Machine.

A JVM é a máquina virtual que interpreta o bytecode Java e a utiliza para executar um programa. Isso significa que o Clojure funciona quase perfeitamente com código projetado para Java (embora pareça um pouco estranho), e também significa que ele é executado muito rapidamente em comparação com alguns outros Lisps. Embora seja um pouco mais lento que o Java, ainda é muito mais rápido que o Python, Ruby ou Javascript.

  (.indexOf [1 2 3 4] 2) ;; .indexOf is a Java method! 
  ; => 1 

O Clojure foi projetado para simultaneidade.

"Concorrência" aqui significa "um programa trabalhando em vários segmentos de uma só vez", o que pode tornar seu código muito mais rápido. Também pode tornar seu código muito mais buggier; imagine se duas funções diferentes estivessem mudando e lendo do mesmo objeto de uma só vez! Seria um caos total. Felizmente, no Clojure, as variáveis são imutáveis, o que significa que não há chance de esse tipo de desordem se soltar. A linguagem também possui uma variedade de recursos para facilitar o código concorrente, como o sistema de memória transacional de software, agentes e átomos.

| :point_left: Anterior | :book: Casa :book: | Próximo :point_right: |
| | Índice | Noções básicas |