Introdução à linguagem Clojure

  • Por que Clojure?
  • Em que Clojure é bom?
  • Como é o Clojure?
    • Comentários
  • O que é um REPL?
  • REPL em ação

Por que Clojure?

Por que estamos ensinando Clojure? Embora não seja uma linguagem muito popular, estamos usando Clojure por causa de três qualidades que o tornam uma primeira linguagem ideal para aprender – ou uma ótima linguagem para se aprender além das outras que talvez você já conheça:

Clojure é simples

Clojure é simples. O que não quer dizer que não seja poderoso; pois o é. O número de conceitos que você precisa conhecer pra programar em Clojure é bem pequeno e são fáceis de compreender. Com Clojure você consegue ser bastante produtivo com um conjunto bem pequeno da linguagem, e melhor na medida em que você vai aprendendo mais sobre a linguagem

Clojure é universal

Clojure é universal. Algumas linguagens tem um foco específico. JavaScript, por exemplo, foi tradicionalmente usado apenas em páginas web (embora isso tenha mudado um pouco recentemente). Objective-C é usado principalmente para aplicativos iOS. Clojure pode ser usado para qualquer tipo de aplicação facilmente.

Clojure é divertido

Clojure é divertido. Isso é questão de opinião, é claro, mas a gente acha que é verdade. Espero que durante esse curso você sinta a alegria de ver um programa Clojure ser criado e fazer algo poderoso e surpreendente.

Em que o Clojure é bom?

Então, dissemos que Clojure é universal, e é. O que não significa que não tenha situações em que ele seja mais útil.

Processamento de dados

Clojure é conhecido por ser bom em processar dados, pois tem um bom conjunto de estruturas de dados – isto é, tem várias formas nativas de representar dados que são fáceis de usar e poderosas.

Concorrência

Clojure é conhecido por sua concorrência. As variáveis e estruturas de dados em Clojure são imutáveis por padrão, ou seja, seus conteúdos nunca mudam. Toda vez que alguma modificação é necessária, um novo valor é criado. Por exemplo, se vc adiciona um elemento em uma lista, uma nova lista é criada com os elementos antigos mais o novo elemento, enquanto a lista antiga continua a mesma. Pode parecer uma abordagem ineficiente, mas por baixo dos panos existe um compartilhamento muito eficiente das partes da lista que não mudaram, o que é invisível para o programador. Vetores em Clojure são particularmente eficientes nesse sentido.

Tudo o mais!

REST APIs, web apps…

Como é o Clojure?

(print-str "Hello, World!")
(+ 3 4)
(max 8 17 2)

Parênteses

Note os parênteses. Parênteses cercam as instruções para o computador no Clojure. O parêntese da esquerda é o início da instrução, e o parêntese da direita correspondente é o final desta instrução. Em geral códigos em Clojure têm muitos parênteses aninhados, ou em outras palavras, instruções cercadas aninhadas.

Funções

Logo depois dos parênteses, vemos a função. Funções fazem todo o trabalho pesado no Clojure. print-str, + e max são ambos funções. Quando estas funções são executadas, elas devolvem algum tipo de valor. Funções em Clojure sempre devolvem um valor.

Argumentos

Muitas funções recebem argumentos–que são todo o resto que está dentro do parênteses ao redor da função, após o seu nome. print-str recebe "Hello, World!" e devolve o próprio texto. + recebe 3 e 4, soma, e devolve 7. max recebe vários números e devolve qual é o maior deles.

Comentários

Em Clojure, comentários podem ser iniciados com um ponto-e-vírgula. Tudo após o ponto-e-vírgula até o fim da linha é considerado como comentário é ignorado. Apenas um ponto-e-vírgula é o suficiente, mas algumas vezes vemos dois pontos-e-vírgulas na mesma linha, dependendo do estilo do escritor.

Referência: Comentário

;; funções de exemplo do slide anterior
(print-str "Hello, World!")  ; o tão conhecido hello world
(+ 3 4)                      ; por que não 3 + 4? descobrir depois

O que é um REPL?

“REPL” significa “Read-Eval-Print-Loop”, ou “Leia-Execute-Imprima-Repita”, que ainda não faz tanto sentido sem contexto. Muitas linguagens de programação, incluindo Clojure, tem uma maneira de executar código interativamente para que você consiga ver o resultado instantaneamente. Em outras palavras, o código é lido, executado, e então o resultado é mostrado na tela, e começa novamente – por isso, um loop.

Read, Eval, Print, Loop

Nightcode's repl

EXERCÍCIO 1: Experimente o REPL

  1. Abra o seu terminal
  2. lein repl
  3. Digite as funções Clojure abaixo e veja o que acontece
(print-str "Hello, World!")
(print-str "Hello, World!" " " "from Clojure")
(+ 3 4)
(- 3 4)
(* 3 4)

Tenha certeza de digitar as linhas exatamente como você as vê acima, cuidando para colocar os parênteses nos lugares certos.

EXERCÍCIO 2: Veja as documentações do Clojure (em inglês)

  • No final do painel do REPL, tente procurar pela documentação de uma das funções que você usou
  • Você pode usar o comando (doc nome-da-funcao) para fazer isso
  • Tente (doc +) e (doc max) no REPL
  • Tente outras funções que a gente usou até agora, por exemplo -, *, ou mesmo doc

Volte para o primeiro slide, ou vá para o índice do currículo.