29 de julho de 2011

Introdução ao Clojure



Clojure é uma linguagem LISP moderna que tem por vantagem rodar na Java Virtual Machine (JVM).
Lisp, para quem não conhece é uma família de linguagens funcionais de programação que tem como alguns destaques:
  1. Poucos tipos de dados (geralmente apenas listas)
  2. Avaliação preguiçosa (lazy evaluation) - funções são avaliadas apenas quando preciso
  3. Suporte à concorrência facilitado
Quem não está acostumado com o jeito LISP de desenvolver pode estranhar um pouco, ainda mais quando se vem de linguagens imperativas ou orientadas a objeto. Mas, Clojure se destaca um pouco e consegue chamar mais a atenção de programadores de outras linguagens, principalmente de desenvolvedores Java, devido a facilidade com que se pode utilizar códigos Java de dentro de um código Clojure.

Mas, não é só por isto que Clojure se popularizou e tem conquistado cada vez mais desenvolvedores ao redor do mundo. Rich Hickey criou a linguagem em 2007 após uma pesquisa rigorosa em linguagens de programação e com o intuito de evitar muitas das limitações impostas pelo gerenciamento de estados feito pelas linguagens OO. Explico: Clojure nasceu para lidar com o problema da concorrência (um dos grandes assuntos da atualidade devido às aplicações em nuvem) e faz isto de uma forma tão transparente que o desenvolvedor não precisa se preocupar com deadlocks, na verdade o programador não precisa se preocupar muito com isto, a linguagem já trata isso por trás da sua API.

Clojure é uma linguagem compilada, porém dinâmica e a sintaxe quase não existe, um tradicional "hello world" por exemplo fica assim:
(println "Hello World")
A função println aqui nada mais é que a execução do método System.println() do Java. Note os parênteses, típicos das linguagens LISP (Lots of Irritating Single Parentheses), no começo estranha-se a quantidade deles que é preciso escrever, mas o interessante é que não é preciso digitar mais nada! A sintaxe é praticamente só esta: escreva tudo entre parênteses e voilà.

Outro aspecto importante a ser mencionado é que Clojure é uma linguagem para quem é preguiçoso ágil, mas, para conseguir esta agilidade é preciso entender a sua filosofia. É preciso quebrar a cabeça algumas vezes tentando resolver problemas do jeito OO de ser até conseguir pensar de modo funcional, e para quem não está acostumado, realmente dá um grande trabalho.

Existem muitos outros aspectos da linguagem que devem ser abordados e/ou aprofundados como a imutabilidade das variáveis, as estruturas de dados em Clojure (maps, vectors, lists etc.), a interoperabilidade com Java, as estruturas adaptadas para concorrência etc. Enfim, há muito o que se falar ainda, esta é apenas uma breve introdução à linguagem.

Nenhum comentário:

Postar um comentário