Nos últimos posts eu percebi que me empolguei um pouco no assunto Clojure. Então, esse é um post para tentar começar com a linguagem, ao invés de tentar entender detalhes. Vou atualizar os outros posts para indicar que esse é o primeiro da série, apesar de estar por último…
Clojure é uma linguagem baseada em LISP. Isso, pra muita gente, significa parênteses intermináveis e sintaxe horripilante. Mas não é bem assim.
Os parênteses são um desafio, um degrau. Então ignore-os por enquanto. Use um editor com suporte ao parinfer – Atom ou LightTable. Acho que o vim também. Isso vai tratar de manter os parênteses em sincronia, baseado na indentação, e também de forçar você a entender a indentação de Clojure. A partir daí, é entender por que esses parênteses existem. Então vamos lá:
Em LISPs, ou seja, em Clojure, parênteses nunca são opcionais. Nunca. Então nem tente resolver seu código com “vou tentar colocar um parênteses aqui” porque não vai funcionar. Você sempre abre um parênteses quando você vai chamar uma função ou special form, ou macro. A soma, multiplicação, divisão e subtração (+
*
/
e -
, respectivamente) são funções. Concatenação de strings (str
) também, bem como map
, reduce
, split
e join
. Já o if
não é uma função – é uma special form, bem como fn*
(retorna uma nova função) e def
(define novas variáveis, que os LISPs gostam se chamar de símbolos). E o or
, o and
, e o defn
são macros. Para poder usar todos eles, sem exceção, você tem que abrir um parêntese.
Primeiros passos
Para somar 4 números, abrimos um parêntese e o primeiro elemento é a função da soma. Ou seja:
(+ 5 3 9 7)
Isso vai somar os quatro números. Normalmente deixamos grudado ao parêntese a função que vamos rodar.
(more…)