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
REPLRead-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=> foo2
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
POR QUE NÃO?
36
OBRIGADO!Eduardo Aquiles Radanovitsck
Top Related