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
No TDC Floripa...

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 ou objetos do domínio

Funções

Imutabilidade

JVM

WEB
println “Hello, TDC!”)(
7
SINTAXE
Lista de símbolos onde o
primeiro é invocado
passando o resto como
argumento
8
(* 2 3 4) => 24
((fn [n] (* 2 n)) 2) => 4
(map inc [1 2 3]) => (2 3 4)
10
REPL
Hein?
11
REPL
Read-eval-print loop
(interpretador)
Experimentação com a
linguagem
» lein repl
» lein repl
user=> (def foo 2)
#'user/foo
» lein repl
user=> (foo)
ClassCastException java.lang.Long cannot be
cast to clojure.lang.IFn user/eval1265
» lein repl
user=> foo
2
» 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
17
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}
TDC2016POA | Trilha Programacao Funcional - Por que sua próxima aplicação web deve ser em Clojure?
20
DADOS/OBJETOSDODOMÍNIO
entidades lógicas
;apresentador
{:nome “Eduardo”}
;outro exemplo de apresentador
{:nome “Eduardo Aquiles” :idade 28}
;cotação do dólar
[3.49 3.57 3.54]
22
Dados usam estruturas
da linguagem e são
explícitos para tornar
fácil a argumentação em
cima deles
23
FUNÇÕES
Operações ou
computaçõ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}
25
Simplicidade
26
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]
28
Estruturas de dados
persistentes
Favorece concorrência
29
Defeitos envolvendo
mutabilidade são
complexos e custosos
para se corrigir
30
Linguagem permite
mutabilidade, mas torna
ato explícito
31
JVM
VM como plataforma
32
GC
tipos
Interop (java >>> C)
(java.lang.Math/pow 2 3) => 8.0
34
RESUMINDO...
35

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
36
E O QUE ISSO
AJUDA COM UMA
APLICAÇÃO WEB?
37
JVM altamente otimizada,
diversas ferramentas
para monitoramento,
além de servidores HTTP
disponíveis
38
Imutabilidade por
padrão significa que
interação entre
requisições será menor
ou zero
39
armazenamento →
transformação →
apresentação
Fluxo se encaixa no
modelo funcional
40
Maioria das vezes
estamos movendo dados
de uma lado para o
outro – realmente
preciso criar um tipo?
41
(slide obrigatório
sobre ClojureScript)
42
PORQUENÃO?
43
OBRIGADO!
bit.ly/pq-clojure
Eduardo Aquiles Radanovitsck
@eduaquiles
eduardoaquiles.ar@gmail.com
eduardoaquiles@thoughtworks.com

Mais conteúdo relacionado

PDF
Por que sua próxima aplicação web deve ser em Clojure?
PPTX
Programação Concorrente - Aula 04
PDF
[Curso Java Basico - Exceptions] Aula 52: criando sua propria exception
PPTX
PPTX
Programação Concorrente - Aula 05
PDF
TDC2016POA | Trilha Arquitetura - Onion Architecture
PPT
TDC2016POA | Trilha Arquitetura - CQRS e Event Driven Architecture valem a p...
PPTX
TDC2016POA | Trilha PHP - Quero ser desenvolvedor PHP. Como me preparar para ...
Por que sua próxima aplicação web deve ser em Clojure?
Programação Concorrente - Aula 04
[Curso Java Basico - Exceptions] Aula 52: criando sua propria exception
Programação Concorrente - Aula 05
TDC2016POA | Trilha Arquitetura - Onion Architecture
TDC2016POA | Trilha Arquitetura - CQRS e Event Driven Architecture valem a p...
TDC2016POA | Trilha PHP - Quero ser desenvolvedor PHP. Como me preparar para ...

Destaque (20)

PPTX
TDC2016POA | Trilha Ruby - Hora da aventura! Vamos melhorar seu código?!?
PDF
TDC2016POA | Trilha Ruby - Melhorando seu código com Law of Demeter e Tell do...
PDF
TDC2016POA | Trilha Ruby - Como não fazer do Rails o seu pesadelo
PDF
TDC2016POA | Trilha Ruby - Testes de contrato em um contexto de services e mi...
PPT
Code smells in PHP
PPT
TDC2016SP - Trilha Microservices
PPTX
Doctrine for Dummies
PPTX
TDC2016SP - Trilha Node.Js
PPTX
TDC2016SP - Trilha Microservices
PDF
TDC2016SP - Trilha Microservices
PPTX
4 introdução ao paradigma funcional
PDF
Paradigmas de Linguagens de Programação - Introdução
PDF
TDC2016POA | Trilha DevOps - Métricas, métricas para todos os lados!
PDF
TDC2016POA | Trilha DevOps - Monitoramento da infraestrutura para aplicac?o?e...
PDF
TDC2016POA | Trilha DevOps - DevOps Anti-Patterns
PDF
TDC2016POA | Trilha DevOps - Monitoramento real-time com ELK
PDF
TDC2016POA | Trilha Arquetetura - Revitalizando aplicações desktop usando Ce...
PPTX
TDC2016POA | Trilha Android - Monetização: conheça a rede de anúncios que pag...
PDF
TDC2016POA | Trilha Dinamica - Facilitação - Que momento o grupo se encontra?
PDF
TDC2016POA | Trilha Android - Firebase Cloud Messaging para Android e IoT
TDC2016POA | Trilha Ruby - Hora da aventura! Vamos melhorar seu código?!?
TDC2016POA | Trilha Ruby - Melhorando seu código com Law of Demeter e Tell do...
TDC2016POA | Trilha Ruby - Como não fazer do Rails o seu pesadelo
TDC2016POA | Trilha Ruby - Testes de contrato em um contexto de services e mi...
Code smells in PHP
TDC2016SP - Trilha Microservices
Doctrine for Dummies
TDC2016SP - Trilha Node.Js
TDC2016SP - Trilha Microservices
TDC2016SP - Trilha Microservices
4 introdução ao paradigma funcional
Paradigmas de Linguagens de Programação - Introdução
TDC2016POA | Trilha DevOps - Métricas, métricas para todos os lados!
TDC2016POA | Trilha DevOps - Monitoramento da infraestrutura para aplicac?o?e...
TDC2016POA | Trilha DevOps - DevOps Anti-Patterns
TDC2016POA | Trilha DevOps - Monitoramento real-time com ELK
TDC2016POA | Trilha Arquetetura - Revitalizando aplicações desktop usando Ce...
TDC2016POA | Trilha Android - Monetização: conheça a rede de anúncios que pag...
TDC2016POA | Trilha Dinamica - Facilitação - Que momento o grupo se encontra?
TDC2016POA | Trilha Android - Firebase Cloud Messaging para Android e IoT
Anúncio

Semelhante a TDC2016POA | Trilha Programacao Funcional - Por que sua próxima aplicação web deve ser em Clojure? (20)

PDF
Testes em Aplicações Web com Cactus
PPTX
Matlab – curso básico (1)
PDF
Project coin pequenas mudanças grandes facilidades
PDF
Sql proficiente
PPT
TechEd 2005: Novos Recursos T-SQL (SQL 2005)
PDF
Conhecendo a JSR 223: Scripting for the Java Platform
PPTX
Postgre sql
PDF
Ecosistema spring a_plataforma_enterprise_jav
PDF
JavaFX 1.2
PDF
JavaFX 1.2
PPT
Integração de Tecnologias
PDF
TDC2016POA | Trilha Android - Testes no Android
PDF
TDC2016POA | Trilha Android - Testes no Android
PDF
O que é que o Java não tem?
PPTX
Apresentando o EcmaScript 6
PPTX
DOC
Prova qco-2008.informática
PDF
Novidades java 7
PPTX
Semana 3: Introdução à linguagem de programação Java
Testes em Aplicações Web com Cactus
Matlab – curso básico (1)
Project coin pequenas mudanças grandes facilidades
Sql proficiente
TechEd 2005: Novos Recursos T-SQL (SQL 2005)
Conhecendo a JSR 223: Scripting for the Java Platform
Postgre sql
Ecosistema spring a_plataforma_enterprise_jav
JavaFX 1.2
JavaFX 1.2
Integração de Tecnologias
TDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no Android
O que é que o Java não tem?
Apresentando o EcmaScript 6
Prova qco-2008.informática
Novidades java 7
Semana 3: Introdução à linguagem de programação Java
Anúncio

Mais de tdc-globalcode (20)

PDF
TDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidade
PDF
TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...
PDF
TDC2019 Intel Software Day - ACATE - Cases de Sucesso
PDF
TDC2019 Intel Software Day - Otimizacao grafica com o Intel GPA
PDF
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVino
PDF
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...
PDF
TDC2019 Intel Software Day - Inferencia de IA em edge devices
PDF
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publica
PPT
Trilha .Net - Programacao funcional usando f#
PDF
TDC2018SP | Trilha Go - Case Easylocus
PDF
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?
PDF
TDC2018SP | Trilha Go - Clean architecture em Golang
PDF
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QA
PDF
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendencia
PDF
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Service
PDF
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NET
PDF
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
PDF
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
PDF
TDC2018SP | Trilha .Net - .NET funcional com F#
PDF
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor em .Net Core
TDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidade
TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...
TDC2019 Intel Software Day - ACATE - Cases de Sucesso
TDC2019 Intel Software Day - Otimizacao grafica com o Intel GPA
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVino
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...
TDC2019 Intel Software Day - Inferencia de IA em edge devices
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publica
Trilha .Net - Programacao funcional usando f#
TDC2018SP | Trilha Go - Case Easylocus
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?
TDC2018SP | Trilha Go - Clean architecture em Golang
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QA
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendencia
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Service
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NET
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
TDC2018SP | Trilha .Net - .NET funcional com F#
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor em .Net Core

Último (20)

PDF
Ebook - Matemática_Ensino_Médio_Saeb_V1.pdf
PDF
ESPELHOS DA ALMA A PSICOLOGIA POR TRÁS DOS CONTOS DE FADAS.pdf
PPTX
QuestõesENEMVESTIBULARPARAESTUDOSEAPRENDIZADO.pptx
PPTX
HISTÓRIA DO BRASIL - anos de Democracia.pptx
PDF
Combate a Incêndio - Estratégias e Táticas de Combate a Incêndio por Francis...
PDF
Uma Introdução às Ciências do Alcorão (Islam)
PPTX
MENDEL - Aula sobre Mendel - Genética EM
PPTX
Aula 13 - Tópico Frasal - Argumentação.pptx
PPTX
16. MODERNISMO - PRIMEIRA GERAÇÃO - EDIÇÃO 2021 (1).pptx
PDF
Formação politica brasil_2017.pptx.pdf
PPTX
TREINAMENTO DE INSPETOR DE ANDAIMES.pptx
PPT
História e Evolução dos Computadores domésticos
PDF
embriologia_animal_aula_share_2026_semestre
PPTX
Realismo e Naturalismo: Aluísio Azevedo.
PPTX
NR11 - Treinamento Direcao Defensiva - 2023.pptx
PPTX
norma regulamentadora numero vinte nr 20
PPTX
O Romantismo e a identidade brasileira..
PPTX
Ocupação e transformação dos territórios.pptx
PPTX
Trabalho Cidades sustentáveis ou Utopia.pptx
PPTX
ELEMENTOS E FUNÇÕES DE LINGUAGEM (EMOTIVA, REFERENCIAL, CONATIVA, POÉTICA, FÁ...
Ebook - Matemática_Ensino_Médio_Saeb_V1.pdf
ESPELHOS DA ALMA A PSICOLOGIA POR TRÁS DOS CONTOS DE FADAS.pdf
QuestõesENEMVESTIBULARPARAESTUDOSEAPRENDIZADO.pptx
HISTÓRIA DO BRASIL - anos de Democracia.pptx
Combate a Incêndio - Estratégias e Táticas de Combate a Incêndio por Francis...
Uma Introdução às Ciências do Alcorão (Islam)
MENDEL - Aula sobre Mendel - Genética EM
Aula 13 - Tópico Frasal - Argumentação.pptx
16. MODERNISMO - PRIMEIRA GERAÇÃO - EDIÇÃO 2021 (1).pptx
Formação politica brasil_2017.pptx.pdf
TREINAMENTO DE INSPETOR DE ANDAIMES.pptx
História e Evolução dos Computadores domésticos
embriologia_animal_aula_share_2026_semestre
Realismo e Naturalismo: Aluísio Azevedo.
NR11 - Treinamento Direcao Defensiva - 2023.pptx
norma regulamentadora numero vinte nr 20
O Romantismo e a identidade brasileira..
Ocupação e transformação dos territórios.pptx
Trabalho Cidades sustentáveis ou Utopia.pptx
ELEMENTOS E FUNÇÕES DE LINGUAGEM (EMOTIVA, REFERENCIAL, CONATIVA, POÉTICA, FÁ...

TDC2016POA | Trilha Programacao Funcional - Por que sua próxima aplicação web deve ser em Clojure?