O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

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

196 visualizações

Publicada em

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

Publicada em: Educação
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

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

×