Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

447 views

Published on

Nessa palestra, exploro algumas características de Clojure e após, por que essas caracterísitcas são boas para desenvolver uma aplicação web

Published in: Software
  • Be the first to comment

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 AGENDA  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  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. (* 2 3 4) => 24 ((fn [n] (* 2 n)) 2) => 4 (map inc [1 2 3]) => (2 3 4)
  9. 9. 9 REPL Read-eval-print loop (interpretador) Experimentação com a linguagem => feedback rápido
  10. 10. » 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. 11. 11 TESTES Testes são tão intrínsicos na linguagem que estão na biblioteca padrão
  12. 12. (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. 13. 13 DADOS entidades lógicas
  14. 14. ;apresentador {:nome “Eduardo”} ;apresentador atualizado {:nome “Eduardo Aquiles” :idade 28} ;cotação do dolar últimos dias [3.49 3.57 3.54]
  15. 15. 15 Dados usam estruturas da linguagem e são explícitos para tornar fácil a argumentação em cima deles
  16. 16. 16 FUNÇÕES Operações em cima de dados Valores entram, valor sai
  17. 17. (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. 18. 18 Simplicidade
  19. 19. 19 IMUTABILIDADE Ou… como remover uma classe inteira de defeitos do seu sistema
  20. 20. (def my-vec [1 2 3]) (conj my-vec 4) => [1 2 3 4] my-vec => [1 2 3]
  21. 21. 21 Estruturas de dados persistentes Favorece concorrência
  22. 22. 22 Defeitos envolvendo mutabilidade são complexos e custosos para se corrigir
  23. 23. 23 Linguagem permite mutabilidade, mas torna ato explícito
  24. 24. 24 JVM VM como plataforma
  25. 25. 25 GC tipos Interop (java >>> C)
  26. 26. (java.lang.Math/pow 2 3) => 8.0
  27. 27. 27 RESUMINDO...
  28. 28. 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. 29. 29 E O QUE ISSO AJUDA COM UMA APLICAÇÃO WEB?
  30. 30. 30 JVM altamente otimizada, diversas ferramentas para monitoramento, além de servidores HTTP disponíveis
  31. 31. 31 Imutabilidade por padrão significa que interação entre requisições será menor ou zero
  32. 32. 32 banco de dados → transformação → apresentação na tela Fluxo se encaixa no modelo funcional
  33. 33. 33 Maioria das vezes estamos movendo dados de uma lado para o outro – realmente preciso criar um tipo?
  34. 34. 34 slide obrigatório sobre ClojureScript
  35. 35. 35 PORQUENÃO?
  36. 36. 36 OBRIGADO! Eduardo Aquiles Radanovitsck @eduaquiles eduardoaquiles.ar@gmail.com eduardoaquiles@thoughtworks.com

×