SlideShare uma empresa Scribd logo
1 de 36
Baixar para ler offline
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

Destaque

Blog diapocitiva ventajas y desventajas
Blog diapocitiva ventajas y desventajasBlog diapocitiva ventajas y desventajas
Blog diapocitiva ventajas y desventajasNELLYS29
 
TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal
TDC2016SP - Otimização Prematura: a Raíz de Todo o MalTDC2016SP - Otimização Prematura: a Raíz de Todo o Mal
TDC2016SP - Otimização Prematura: a Raíz de Todo o Maltdc-globalcode
 
Chinese Cultural Entailment 中国文化蕴涵
Chinese Cultural Entailment  中国文化蕴涵Chinese Cultural Entailment  中国文化蕴涵
Chinese Cultural Entailment 中国文化蕴涵John Jeffery
 
TDC2016SP - Groovy como você nunca viu
TDC2016SP - Groovy como você nunca viuTDC2016SP - Groovy como você nunca viu
TDC2016SP - Groovy como você nunca viutdc-globalcode
 
Actividad de aprendizaje 2 SEGUNDO BLOQUE
Actividad de aprendizaje 2 SEGUNDO BLOQUEActividad de aprendizaje 2 SEGUNDO BLOQUE
Actividad de aprendizaje 2 SEGUNDO BLOQUEPaolachable
 
TDC2016SP - Finanças Quantitativas com Python
TDC2016SP - Finanças Quantitativas com PythonTDC2016SP - Finanças Quantitativas com Python
TDC2016SP - Finanças Quantitativas com Pythontdc-globalcode
 
TDC2016SP - Desacoplando suas regras de negócio do Rails
TDC2016SP - Desacoplando suas regras de negócio do RailsTDC2016SP - Desacoplando suas regras de negócio do Rails
TDC2016SP - Desacoplando suas regras de negócio do Railstdc-globalcode
 
取是一種本事捨是一種智慧
取是一種本事捨是一種智慧取是一種本事捨是一種智慧
取是一種本事捨是一種智慧Jaing Lai
 
Exposicion final
Exposicion finalExposicion final
Exposicion finalPerson0001
 
TDC2016SP - Luiza Labs - Migrando .NET p/ Python
TDC2016SP - Luiza Labs - Migrando .NET p/ PythonTDC2016SP - Luiza Labs - Migrando .NET p/ Python
TDC2016SP - Luiza Labs - Migrando .NET p/ Pythontdc-globalcode
 
TDC2016SP - Flask para Web
TDC2016SP - Flask para WebTDC2016SP - Flask para Web
TDC2016SP - Flask para Webtdc-globalcode
 
Arquitetura para entrega continua
Arquitetura para entrega continuaArquitetura para entrega continua
Arquitetura para entrega continuaLeonardo Kobus
 
Modelamiento Dimensional–Poblamiento
Modelamiento Dimensional–PoblamientoModelamiento Dimensional–Poblamiento
Modelamiento Dimensional–PoblamientoPerson0001
 
Vigilancia epidemiológica
Vigilancia epidemiológicaVigilancia epidemiológica
Vigilancia epidemiológicaCarlos Guevara
 

Destaque (19)

Blog diapocitiva ventajas y desventajas
Blog diapocitiva ventajas y desventajasBlog diapocitiva ventajas y desventajas
Blog diapocitiva ventajas y desventajas
 
TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal
TDC2016SP - Otimização Prematura: a Raíz de Todo o MalTDC2016SP - Otimização Prematura: a Raíz de Todo o Mal
TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal
 
Chinese Cultural Entailment 中国文化蕴涵
Chinese Cultural Entailment  中国文化蕴涵Chinese Cultural Entailment  中国文化蕴涵
Chinese Cultural Entailment 中国文化蕴涵
 
TDC2016SP - Groovy como você nunca viu
TDC2016SP - Groovy como você nunca viuTDC2016SP - Groovy como você nunca viu
TDC2016SP - Groovy como você nunca viu
 
Actividad de aprendizaje 2 SEGUNDO BLOQUE
Actividad de aprendizaje 2 SEGUNDO BLOQUEActividad de aprendizaje 2 SEGUNDO BLOQUE
Actividad de aprendizaje 2 SEGUNDO BLOQUE
 
TDC2016SP - Finanças Quantitativas com Python
TDC2016SP - Finanças Quantitativas com PythonTDC2016SP - Finanças Quantitativas com Python
TDC2016SP - Finanças Quantitativas com Python
 
TDC2016SP - Desacoplando suas regras de negócio do Rails
TDC2016SP - Desacoplando suas regras de negócio do RailsTDC2016SP - Desacoplando suas regras de negócio do Rails
TDC2016SP - Desacoplando suas regras de negócio do Rails
 
取是一種本事捨是一種智慧
取是一種本事捨是一種智慧取是一種本事捨是一種智慧
取是一種本事捨是一種智慧
 
Exposicion final
Exposicion finalExposicion final
Exposicion final
 
11. Arrays
11. Arrays11. Arrays
11. Arrays
 
13. Queue
13. Queue13. Queue
13. Queue
 
TDC2016SP - Luiza Labs - Migrando .NET p/ Python
TDC2016SP - Luiza Labs - Migrando .NET p/ PythonTDC2016SP - Luiza Labs - Migrando .NET p/ Python
TDC2016SP - Luiza Labs - Migrando .NET p/ Python
 
TDC2016SP - Flask para Web
TDC2016SP - Flask para WebTDC2016SP - Flask para Web
TDC2016SP - Flask para Web
 
Arquitetura para entrega continua
Arquitetura para entrega continuaArquitetura para entrega continua
Arquitetura para entrega continua
 
Modelamiento Dimensional–Poblamiento
Modelamiento Dimensional–PoblamientoModelamiento Dimensional–Poblamiento
Modelamiento Dimensional–Poblamiento
 
Activity (divisibility)
Activity (divisibility)Activity (divisibility)
Activity (divisibility)
 
12. Stack
12. Stack12. Stack
12. Stack
 
Vigilancia epidemiológica
Vigilancia epidemiológicaVigilancia epidemiológica
Vigilancia epidemiológica
 
Europass Kalendoriukas
Europass Kalendoriukas Europass Kalendoriukas
Europass Kalendoriukas
 

Semelhante a Por que Clojure para sua próxima aplicação web

Testes em Aplicações Web com Cactus
Testes em Aplicações Web com CactusTestes em Aplicações Web com Cactus
Testes em Aplicações Web com CactusDenis L Presciliano
 
Introdução a testes unitários automatizados com JUnit e NUnit
Introdução a testes unitários automatizados com JUnit e NUnitIntrodução a testes unitários automatizados com JUnit e NUnit
Introdução a testes unitários automatizados com JUnit e NUnitelliando dias
 
Conhecendo a JSR 223: Scripting for the Java Platform
Conhecendo a JSR 223: Scripting for the Java PlatformConhecendo a JSR 223: Scripting for the Java Platform
Conhecendo a JSR 223: Scripting for the Java PlatformMilfont Consulting
 
TDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no AndroidTDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no Androidtdc-globalcode
 
TDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no AndroidTDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no Androidtdc-globalcode
 
Apresentacao Ii Encontro Sl Amazonas Integracao De Frameworks
Apresentacao Ii Encontro Sl Amazonas Integracao De FrameworksApresentacao Ii Encontro Sl Amazonas Integracao De Frameworks
Apresentacao Ii Encontro Sl Amazonas Integracao De FrameworksNelson Sozinho
 
Project coin pequenas mudanças grandes facilidades
Project coin pequenas mudanças grandes facilidadesProject coin pequenas mudanças grandes facilidades
Project coin pequenas mudanças grandes facilidadesMarcelo de Castro
 
Groovy na plataforma Java
Groovy na plataforma JavaGroovy na plataforma Java
Groovy na plataforma JavaJoão Lourenço
 
Interop itcare: Interoperabilidade Java e .NET
Interop itcare: Interoperabilidade Java e .NETInterop itcare: Interoperabilidade Java e .NET
Interop itcare: Interoperabilidade Java e .NETAlessandro Binhara
 
Produtividade em Java com Grails
Produtividade em Java com GrailsProdutividade em Java com Grails
Produtividade em Java com GrailsWanderson Oliveira
 
lista de exercícios de estrutura de dados Básico primeira prova
lista de exercícios de estrutura de dados Básico primeira prova lista de exercícios de estrutura de dados Básico primeira prova
lista de exercícios de estrutura de dados Básico primeira prova Rogério Cardoso
 

Semelhante a Por que Clojure para sua próxima aplicação web (20)

Testes em Aplicações Web com Cactus
Testes em Aplicações Web com CactusTestes em Aplicações Web com Cactus
Testes em Aplicações Web com Cactus
 
Introdução a testes unitários automatizados com JUnit e NUnit
Introdução a testes unitários automatizados com JUnit e NUnitIntrodução a testes unitários automatizados com JUnit e NUnit
Introdução a testes unitários automatizados com JUnit e NUnit
 
Conhecendo a JSR 223: Scripting for the Java Platform
Conhecendo a JSR 223: Scripting for the Java PlatformConhecendo a JSR 223: Scripting for the Java Platform
Conhecendo a JSR 223: Scripting for the Java Platform
 
Sql proficiente
Sql proficienteSql proficiente
Sql proficiente
 
JavaFX 1.2
JavaFX 1.2JavaFX 1.2
JavaFX 1.2
 
JavaFX 1.2
JavaFX 1.2JavaFX 1.2
JavaFX 1.2
 
Testes: Por onde Começar?
Testes: Por onde Começar?Testes: Por onde Começar?
Testes: Por onde Começar?
 
TDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no AndroidTDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no Android
 
TDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no AndroidTDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no Android
 
JAVA REFLETCION
JAVA REFLETCIONJAVA REFLETCION
JAVA REFLETCION
 
Apresentacao Ii Encontro Sl Amazonas Integracao De Frameworks
Apresentacao Ii Encontro Sl Amazonas Integracao De FrameworksApresentacao Ii Encontro Sl Amazonas Integracao De Frameworks
Apresentacao Ii Encontro Sl Amazonas Integracao De Frameworks
 
Project coin pequenas mudanças grandes facilidades
Project coin pequenas mudanças grandes facilidadesProject coin pequenas mudanças grandes facilidades
Project coin pequenas mudanças grandes facilidades
 
Groovy na plataforma Java
Groovy na plataforma JavaGroovy na plataforma Java
Groovy na plataforma Java
 
Interop itcare: Interoperabilidade Java e .NET
Interop itcare: Interoperabilidade Java e .NETInterop itcare: Interoperabilidade Java e .NET
Interop itcare: Interoperabilidade Java e .NET
 
1° Madrugada de Testes
1° Madrugada de Testes1° Madrugada de Testes
1° Madrugada de Testes
 
Produtividade em Java com Grails
Produtividade em Java com GrailsProdutividade em Java com Grails
Produtividade em Java com Grails
 
Postgre sql
Postgre sqlPostgre sql
Postgre sql
 
ADO.NET
ADO.NETADO.NET
ADO.NET
 
lista de exercícios de estrutura de dados Básico primeira prova
lista de exercícios de estrutura de dados Básico primeira prova lista de exercícios de estrutura de dados Básico primeira prova
lista de exercícios de estrutura de dados Básico primeira prova
 
Plano De Ensino
Plano De EnsinoPlano De Ensino
Plano De Ensino
 

Por que Clojure para sua próxima aplicação web