Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Clojure é um Java melhor que Java - Codecon 2021

Clojure é um Java melhor que Java - Codecon 2021

Palestra sobre interop java x clojure

Ana Luiza Portello

April 23, 2021
Tweet

More Decks by Ana Luiza Portello

Other Decks in Programming

Transcript

  1. Olá! Meu nome é Ana Bastos Sou engenheira de software(Nubank)

    e cientista da computação(PUC-SP). 2 anabastos @naluhh @anapbastos
  2. “We were after the C++ programmers. We managed to drag

    a lot of them about halfway to Lisp.” Guy Steele, co-author of the Java language specification
  3. A partir do momento que você olhar pra um pedaço

    código não for o suficiente pra entender tudo você tem um side effect
  4. NATIVE TYPES String “Ana” Int 42 Dounle 2.0e64 Ratio ¾

    Bool true, false Symbol concat, + Keyword :foo Null nil
  5. COLLECTIONS Lists (1 2 3 4) Vectors [1 2 3

    4] Maps {:name “Ana”, :sobrenome “Bastos”} Sets #{1 2 3 4}.
  6. CONTA CLIENTE TRANSACAO LIST PONTOS ENDERECO TRANSACAO TRANSACAO O CODIGO

    MISTURA NO MESMO LUGAR REGRAS DE NEGOCIO E REGRAS DE CONCORRENCIA.
  7. (+ 1 9 2) // Operador (println "CodeCon") // Funcao

    (require 'lib) // require (def x 10)
  8. A maior parte das linguagens tem uma sintaxe e gramatica

    especifica e VOCÊ sofreu pra aprender ela
  9. INVOCACAO METODO DE UMA INSTANCIA String s = "fred"; System.out

    .println(s.toUpperCase()); -> "FRED" (.toUpperCase "fred") -> "FRED" (.instanceMember instance args*)
  10. CHAMANDO METODOS ESTATICOS DE UMA CLASSE System.getProperty("java .vm.version"); -> "1.6.0_07-b06-57"

    (System/getProperty "java.vm.version") -> "1.6.0_07-b06-57" (Classname/staticMethod args*)
  11. ACESSANDO CAMPOS DE UMA INSTANCIA DE CLASSE Point p =

    new Point(4,6); p.x; -> 4 (.-x (java.awt.Point. 4 6)) -> 4 (.-instanceField instance)
  12. a.b().c().d(); Classes podem ser passadas como argumentos para essa função?

    Eu não posso adaptar classes de outra biblioteca, preciso sei la, de um decorator
  13. ACESSANDO CAMPOS DE UMA INSTANCIA DE CLASSE Person .getAddress() .getZipcode()

    -> 01139010 (.. person getAddress getZipcode) -> 01139010 (.. instance-expr member+) (.. Classname-symbol member+)
  14. DOTO / Configuration Pattern Thread t = new Thread(runnable); t.setName("My

    Thread"); t.setPriority(100); t.setUncaughtExceptionHandler (handler); t.start(); (doto (Thread. runnable) (.setName "My Thread") (.setPriority 100) (.setUncaughtExceptionHandler handler) (.start)) (.-instanceField instance)
  15. O site TodoBackend tem implementações de uma API de Todo-list

    production ready • Clojure: 168 lines of Clojure (incluindo build configuration) • Java 7 + Spring MVC: 555 lines of XML, 228 Java lines of code, 56 lines of Groovy • Java 8 + Spring 4 Boot: 200 lines of Java, 37 lines of Groovy EXCLUINDO CODIGOS DE BIBLIOTECAS E FRAMEWORKS
  16. “Clojure shrinks our code base to about one-fifth the size

    it would be if we had written in Java” — Anthony Marcar, architect, WalmartLabs
  17. • Overhead de proteção das suas estruturas de dados. •

    Funcional tende a ser mais declarativo • Evita boilerplates com a existencia de MACROS
  18. Cada nova classe ou estrutura vem com ZERO funcionalidade e

    é completamente isolado de outros códigos que já existem. O que aconteceria se eu usasse um Map cru?
  19. “It is better to have 100 functions operate on one

    data structure than to have 10 functions operate on 10 data structures.” - Alan J. Perlis ORIENTADO A OBJETOS != ORIENTADO A DADOS
  20. A ideia do clojure é sobre você lidar com listas

    de estruturas e de mapas de forma inteligente e não reinventar a roda
  21. Purpose Description Living documentation Use spec to include specifications in

    Function documentation (fdef) Data Validation Ensure the data entering and leaving the system or its key functions are of the correct form. Test Data Generation Provide extensive test data coverage with minimal code maintenance Generative testing of functions Test functions using their spec defined contract (fdef) Generative scenario testing Specific correct usage paths for known states Development time checking Instrument functions to ensure correctness Derive code from specifications Specify a system of record for data structures, internal and external to the system. https://practicalli.github.io/clojure/clojure-spec/
  22. Compilado de fontes boas pra aprender clojure https://gist.github.com/yogthos/be323be0361c589570a6da4ccc85f58f Exemplos interop

    https://gist.github.com/daveliepmann/86996c8b9842d78b0509ca24ad4a9 2e9 Lein polyglot https://cljdoc.org/d/leiningen/leiningen/2.9.5/doc/polyglot-clojure-java-pro jects-with-leiningen Clojure Design Patterns http://mishadoff.com/blog/clojure-design-patterns Clojure Made Simple - 2014 https://www.youtube.com/watch?v=VSdnJDO-xdg&ab_channel=OracleDev elopers Clojure for Java Programmers Part 1 - Rich Hickey https://youtu.be/P76Vbsk_3J0