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

Post on 20-Mar-2017

295 views 1 download

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

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

AGENDA 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 Funções Imutabilidade JVM WEB

println “Hello, TDC!”)(

7

SINTAXE

Lista de símbolos onde o primeiro é invocado

passando o resto como argumento

(* 2 3 4) => 24

((fn [n] (* 2 n)) 2) => 4

(map inc [1 2 3]) => (2 3 4)

9

REPLRead-eval-print loop

(interpretador)Experimentação com a linguagem => feedback

rápido

» lein repl

user=> (def foo 2)#'user/foo

user=> (foo)ClassCastException java.lang.Long cannot be cast to clojure.lang.IFn user/eval1265

user=> foo2

11

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}

13

DADOS

entidades lógicas

;apresentador{:nome “Eduardo”}

;apresentador atualizado{:nome “Eduardo Aquiles” :idade 28}

;cotação do dolar últimos dias[3.49 3.57 3.54]

15

Dados usam estruturas da linguagem e são

explícitos para tornar fácil a argumentação em

cima deles

16

FUNÇÕES

Operaçõ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}

18

Simplicidade

19

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]

21

Estruturas de dados persistentes

Favorece concorrência

22

Defeitos envolvendo mutabilidade são

complexos e custosos para se corrigir

23

Linguagem permite mutabilidade, mas torna

ato explícito

24

JVM

VM como plataforma

25

GC

tipos

Interop (java >>> C)

(java.lang.Math/pow 2 3) => 8.0

27

RESUMINDO...

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

E O QUE ISSO AJUDA COM UMA APLICAÇÃO WEB?

30

JVM altamente otimizada, diversas ferramentas para monitoramento,

além de servidores HTTP disponíveis

31

Imutabilidade por padrão significa que

interação entre requisições será menor

ou zero

32

banco de dados →transformação →

apresentação na tela

Fluxo se encaixa no modelo funcional

33

Maioria das vezes estamos movendo dados

de uma lado para o outro – realmente

preciso criar um tipo?

34

slide obrigatório sobre ClojureScript

35

POR QUE NÃO?

36

OBRIGADO!Eduardo Aquiles Radanovitsck

@eduaquileseduardoaquiles.ar@gmail.com

eduardoaquiles@thoughtworks.com