43
1 POR QUE SUA PRÓXIMA APLICAÇÃO WEB DEVE SER EM CLOJURE? Eduardo Aquiles Radanovitsck - @eduaquiles

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

Embed Size (px)

Citation preview

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 mundo (amanhã à noite)

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

REPLRead-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=> foo2

» 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

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 assertions.0 failures, 0 errors.{:test 1, :pass 1, :fail 0, :error 0, :type :summary}

20

DADOS / OBJETOS DO DOMÍNIO

entidades lógicas

;apresentador{:nome “Eduardo”}

;outro exemplo de apresentador{:nome “Eduardo Aquiles” :idade 28}

;cotação do dólar[3.49 3.57 3.54]

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))))

{:test 1, :pass 2, :fail 0, :error 0, :type :summary}

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 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

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

POR QUE NÃO?

43

OBRIGADO!bit.ly/pq-clojure

Eduardo Aquiles Radanovitsck@eduaquiles

[email protected]@thoughtworks.com