Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.
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 mund...
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.IF...
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 a...
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...
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)...
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 preci...
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@thought...
TDC2016POA | Trilha Programacao Funcional - Por que sua próxima aplicação web deve ser em Clojure?
Prochain SlideShare
Chargement dans…5
×

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

201 vues

Publié le

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

Publié dans : Formation
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

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

  1. 1. 1 POR QUE SUA PRÓXIMA APLICAÇÃO WEB DEVE SER EM CLOJURE? Eduardo Aquiles Radanovitsck - @eduaquiles
  2. 2. 2 Minha jornada até agora...
  3. 3. 3 QUEM SOU EU? Desenvolvedor & consultor na TW desde 2010 Java, C#, Clojure, JavaScript EUA, Ecuador, Escócia
  4. 4. 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. 5. 5 AGENDA  Sintaxe  REPL  Testes  Dados ou objetos do domínio  Funções  Imutabilidade  JVM  WEB
  6. 6. println “Hello, TDC!”)(
  7. 7. 7 SINTAXE Lista de símbolos onde o primeiro é invocado passando o resto como argumento
  8. 8. 8
  9. 9. (* 2 3 4) => 24 ((fn [n] (* 2 n)) 2) => 4 (map inc [1 2 3]) => (2 3 4)
  10. 10. 10 REPL Hein?
  11. 11. 11 REPL Read-eval-print loop (interpretador) Experimentação com a linguagem
  12. 12. » lein repl
  13. 13. » lein repl user=> (def foo 2) #'user/foo
  14. 14. » lein repl user=> (foo) ClassCastException java.lang.Long cannot be cast to clojure.lang.IFn user/eval1265
  15. 15. » lein repl user=> foo 2
  16. 16. » 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. 17. 17 TESTES Testes são tão intrínsicos na linguagem que estão na biblioteca padrão
  18. 18. (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}
  19. 19. 20 DADOS/OBJETOSDODOMÍNIO entidades lógicas
  20. 20. ;apresentador {:nome “Eduardo”} ;outro exemplo de apresentador {:nome “Eduardo Aquiles” :idade 28} ;cotação do dólar [3.49 3.57 3.54]
  21. 21. 22 Dados usam estruturas da linguagem e são explícitos para tornar fácil a argumentação em cima deles
  22. 22. 23 FUNÇÕES Operações ou computações em cima de dados Valores entram, valor sai
  23. 23. (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}
  24. 24. 25 Simplicidade
  25. 25. 26 IMUTABILIDADE Ou… como remover uma classe inteira de defeitos do seu sistema
  26. 26. (def my-vec [1 2 3]) (conj my-vec 4) => [1 2 3 4] my-vec => [1 2 3]
  27. 27. 28 Estruturas de dados persistentes Favorece concorrência
  28. 28. 29 Defeitos envolvendo mutabilidade são complexos e custosos para se corrigir
  29. 29. 30 Linguagem permite mutabilidade, mas torna ato explícito
  30. 30. 31 JVM VM como plataforma
  31. 31. 32 GC tipos Interop (java >>> C)
  32. 32. (java.lang.Math/pow 2 3) => 8.0
  33. 33. 34 RESUMINDO...
  34. 34. 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
  35. 35. 36 E O QUE ISSO AJUDA COM UMA APLICAÇÃO WEB?
  36. 36. 37 JVM altamente otimizada, diversas ferramentas para monitoramento, além de servidores HTTP disponíveis
  37. 37. 38 Imutabilidade por padrão significa que interação entre requisições será menor ou zero
  38. 38. 39 armazenamento → transformação → apresentação Fluxo se encaixa no modelo funcional
  39. 39. 40 Maioria das vezes estamos movendo dados de uma lado para o outro – realmente preciso criar um tipo?
  40. 40. 41 (slide obrigatório sobre ClojureScript)
  41. 41. 42 PORQUENÃO?
  42. 42. 43 OBRIGADO! bit.ly/pq-clojure Eduardo Aquiles Radanovitsck @eduaquiles eduardoaquiles.ar@gmail.com eduardoaquiles@thoughtworks.com

×