1
POR QUE SUA PRÓXIMA
APLICAÇÃO WEB DEVE SER
EM CLOJURE?
Eduardo Aquiles Radanovitsck - @eduaquiles
2
Minha jornada até agora...
3
QUEM SOU EU?
Desenvolvedor & consultor na TW desde 2010
Java, C#, Clojure, JavaScript
EUA, Ecuador, Escócia
4
AGENDA

Convencer pelo menos um de vocês a usar Clojure no próximo projeto
...e que Clojure conquiste o mundo (amanhã à noite)
5
AGENDA

Sintaxe

REPL

Testes

Dados

Funções

Imutabilidade

JVM

WEB
println “Hello, TDC!”)(
7
SINTAXE
Lista de símbolos onde o
primeiro é invocado
passando o resto como
argumento
(* 2 3 4) => 24
((fn [n] (* 2 n)) 2) => 4
(map inc [1 2 3]) => (2 3 4)
9
REPL
Read-eval-print loop
(interpretador)
Experimentação com a
linguagem => feedback
rápido
» lein repl
user=> (def foo 2)
#'user/foo
user=> (foo)
ClassCastException java.lang.Long cannot be
cast to clojure.lang.IFn user/eval1265
user=> foo
2
11
TESTES
Testes são tão intrínsicos
na linguagem que estão
na biblioteca padrão
(require '[clojure.test :refer :all])
(deftest sum
(is (= 5 (+ 2 3))))
(run-tests)
Testing user
Ran 1 tests containing 1 assertions.
0 failures, 0 errors.
{:test 1, :pass 1, :fail 0, :error 0, :type
:summary}
13
DADOS
entidades lógicas
;apresentador
{:nome “Eduardo”}
;apresentador atualizado
{:nome “Eduardo Aquiles” :idade 28}
;cotação do dolar últimos dias
[3.49 3.57 3.54]
15
Dados usam estruturas
da linguagem e são
explícitos para tornar
fácil a argumentação em
cima deles
16
FUNÇÕES
Operações em cima de
dados
Valores entram, valor sai
(defn modulo [valor]
(if (> 0 valor)
(* -1 valor)
valor
))
(deftest test-modulo
(is (= 2 (modulo -2)))
(is (= 2 (modulo 2))))
{:test 1, :pass 2, :fail 0, :error 0, :type
:summary}
18
Simplicidade
19
IMUTABILIDADE
Ou… como remover uma
classe inteira de defeitos
do seu sistema
(def my-vec [1 2 3])
(conj my-vec 4) => [1 2 3 4]
my-vec => [1 2 3]
21
Estruturas de dados
persistentes
Favorece concorrência
22
Defeitos envolvendo
mutabilidade são
complexos e custosos
para se corrigir
23
Linguagem permite
mutabilidade, mas torna
ato explícito
24
JVM
VM como plataforma
25
GC
tipos
Interop (java >>> C)
(java.lang.Math/pow 2 3) => 8.0
27
RESUMINDO...
28

Sintaxe – bastante simples: listas para todos os lados

REPL – experimentação e rápido feedback

Testes – não preciso escolher um framework

Dados – uso a melhor estrutura de dados que a própria linguagem já
oferece

Funções – simplicidade

Imutabilidade – menos bugs, mais concorrência

JVM – acesso à classes do Java e bibliotecas
29
E O QUE ISSO
AJUDA COM UMA
APLICAÇÃO WEB?
30
JVM altamente otimizada,
diversas ferramentas
para monitoramento,
além de servidores HTTP
disponíveis
31
Imutabilidade por
padrão significa que
interação entre
requisições será menor
ou zero
32
banco de dados →
transformação →
apresentação na tela
Fluxo se encaixa no
modelo funcional
33
Maioria das vezes
estamos movendo dados
de uma lado para o
outro – realmente
preciso criar um tipo?
34
slide obrigatório
sobre ClojureScript
35
PORQUENÃO?
36
OBRIGADO!
Eduardo Aquiles Radanovitsck
@eduaquiles
eduardoaquiles.ar@gmail.com
eduardoaquiles@thoughtworks.com

Por que sua próxima aplicação web deve ser em Clojure?