SlideShare uma empresa Scribd logo
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

Mais conteúdo relacionado

PDF
TDC2016POA | Trilha Programacao Funcional - Por que sua próxima aplicação web...
PPTX
Introdução ao CMake
PPT
String tokenizer
PPTX
PPT
PHP Básico - Parte 5
PDF
Java orientação a objetos (interfaces)
PDF
Busted, achei seu bug!
PPTX
Como hacer una pagina en wix
TDC2016POA | Trilha Programacao Funcional - Por que sua próxima aplicação web...
Introdução ao CMake
String tokenizer
PHP Básico - Parte 5
Java orientação a objetos (interfaces)
Busted, achei seu bug!
Como hacer una pagina en wix

Destaque (19)

PPTX
Blog diapocitiva ventajas y desventajas
PDF
TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal
PPTX
Chinese Cultural Entailment 中国文化蕴涵
PDF
TDC2016SP - Groovy como você nunca viu
DOCX
Actividad de aprendizaje 2 SEGUNDO BLOQUE
PDF
TDC2016SP - Finanças Quantitativas com Python
PDF
TDC2016SP - Desacoplando suas regras de negócio do Rails
PPS
取是一種本事捨是一種智慧
PPTX
Exposicion final
PPT
11. Arrays
PPT
13. Queue
PDF
TDC2016SP - Luiza Labs - Migrando .NET p/ Python
PDF
TDC2016SP - Flask para Web
PPT
Arquitetura para entrega continua
PPTX
Modelamiento Dimensional–Poblamiento
PPTX
Activity (divisibility)
PPT
12. Stack
DOCX
Vigilancia epidemiológica
PDF
Blog diapocitiva ventajas y desventajas
TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal
Chinese Cultural Entailment 中国文化蕴涵
TDC2016SP - Groovy como você nunca viu
Actividad de aprendizaje 2 SEGUNDO BLOQUE
TDC2016SP - Finanças Quantitativas com Python
TDC2016SP - Desacoplando suas regras de negócio do Rails
取是一種本事捨是一種智慧
Exposicion final
11. Arrays
13. Queue
TDC2016SP - Luiza Labs - Migrando .NET p/ Python
TDC2016SP - Flask para Web
Arquitetura para entrega continua
Modelamiento Dimensional–Poblamiento
Activity (divisibility)
12. Stack
Vigilancia epidemiológica
Anúncio

Semelhante a Por que sua próxima aplicação web deve ser em Clojure? (20)

PDF
Testes em Aplicações Web com Cactus
PPT
Introdução a testes unitários automatizados com JUnit e NUnit
PDF
Conhecendo a JSR 223: Scripting for the Java Platform
PDF
Sql proficiente
PDF
JavaFX 1.2
PDF
JavaFX 1.2
PDF
Testes: Por onde Começar?
PDF
TDC2016POA | Trilha Android - Testes no Android
PDF
TDC2016POA | Trilha Android - Testes no Android
PPTX
PDF
Apresentacao Ii Encontro Sl Amazonas Integracao De Frameworks
PDF
Project coin pequenas mudanças grandes facilidades
PDF
Groovy na plataforma Java
PPTX
Interop itcare: Interoperabilidade Java e .NET
PPTX
1° Madrugada de Testes
PDF
Produtividade em Java com Grails
PPTX
Postgre sql
PDF
lista de exercícios de estrutura de dados Básico primeira prova
PPT
Plano De Ensino
Testes em Aplicações Web com Cactus
Introdução a testes unitários automatizados com JUnit e NUnit
Conhecendo a JSR 223: Scripting for the Java Platform
Sql proficiente
JavaFX 1.2
JavaFX 1.2
Testes: Por onde Começar?
TDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no Android
Apresentacao Ii Encontro Sl Amazonas Integracao De Frameworks
Project coin pequenas mudanças grandes facilidades
Groovy na plataforma Java
Interop itcare: Interoperabilidade Java e .NET
1° Madrugada de Testes
Produtividade em Java com Grails
Postgre sql
lista de exercícios de estrutura de dados Básico primeira prova
Plano De Ensino
Anúncio

Último (7)

PDF
apresentacao introducao computacao ead.pdf
PPTX
Curso de Windows 11 resumido na prática.pptx
PDF
Dos requisitos ao código: como criar código rastreável em PHP
PDF
Evolução em código: algoritmos genéticos com PHP
DOC
COMO AUTOMATIZR JOGOS SUPER NINTENDO ATRAVES DA PROGRAMAÇÃO
PPTX
Mapeamento de Objeto para Tabela Relacional
DOC
CODIGO PARA AUTOMATIZAR A JOGABILIDADE SUPER MARIO
apresentacao introducao computacao ead.pdf
Curso de Windows 11 resumido na prática.pptx
Dos requisitos ao código: como criar código rastreável em PHP
Evolução em código: algoritmos genéticos com PHP
COMO AUTOMATIZR JOGOS SUPER NINTENDO ATRAVES DA PROGRAMAÇÃO
Mapeamento de Objeto para Tabela Relacional
CODIGO PARA AUTOMATIZAR A JOGABILIDADE SUPER MARIO

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