58
Usando programação funcional agora! Rodrigo Domingues [email protected]

[Devcamp] usando programação funcional agora!

Embed Size (px)

Citation preview

Page 1: [Devcamp] usando programação funcional agora!

Usando programação funcional agora!

Rodrigo [email protected]

Page 2: [Devcamp] usando programação funcional agora!

Quem sou eu?

● Trabalho com desenvolvimento há 10 anos

● Trabalho com Java há 8 anos

● Arquiteto de Software na CI&T

● Nerd

[email protected] twitter :(

Page 3: [Devcamp] usando programação funcional agora!

Programação Funcional 101

Page 4: [Devcamp] usando programação funcional agora!
Page 5: [Devcamp] usando programação funcional agora!
Page 6: [Devcamp] usando programação funcional agora!
Page 7: [Devcamp] usando programação funcional agora!
Page 8: [Devcamp] usando programação funcional agora!
Page 9: [Devcamp] usando programação funcional agora!
Page 10: [Devcamp] usando programação funcional agora!
Page 11: [Devcamp] usando programação funcional agora!

Java 8

Page 12: [Devcamp] usando programação funcional agora!
Page 13: [Devcamp] usando programação funcional agora!
Page 14: [Devcamp] usando programação funcional agora!
Page 15: [Devcamp] usando programação funcional agora!

Pensa em uma lista

List<String> herois = Arrays.asList("Batman", "Super Man", "Iron Man", "Hulk", "Flash", "Spider Man");

Page 16: [Devcamp] usando programação funcional agora!

@Test

public void lambda() {

for(String heroi: herois){

System.out.println(heroi);

}

}

Page 17: [Devcamp] usando programação funcional agora!

@Test

public void lambda() {

herois.forEach(new Consumer<String>() {

public void accept(String heroi) {

System.out.println(heroi);

}

});

}

Page 18: [Devcamp] usando programação funcional agora!

@Test

public void lambda() {

herois.forEach(

(String heroi) -> {

System.out.println(heroi);

}

);

}

Page 19: [Devcamp] usando programação funcional agora!

@Test

public void lambda() {

herois.forEach(heroi->System.out.println(heroi));

}

Page 20: [Devcamp] usando programação funcional agora!

@Test

public void lambda() {

herois.forEach(System.out::println);

}

Page 21: [Devcamp] usando programação funcional agora!

Adicionando magia negra!

Page 22: [Devcamp] usando programação funcional agora!

● Uma sequência de "trens" que suporta operações agregadas de forma sequencial ou paralela

O que é stream

Page 23: [Devcamp] usando programação funcional agora!

Stream<String> heroisStream = herois.stream();

Page 24: [Devcamp] usando programação funcional agora!

//Um Stream pode ser dividido em 3 partes

// 1 - Estrutura inicial (resposável por criar o Stream)

herois.stream()

// 2 - Estrutura intermediária, que é resposável por

// executar as funcões que você deseja

.filter(s -> s.startsWith("S"))

// 3 - Estrutura terminal, que é resposável por realizar

// a finalização do fluxo, é decidir qual vai ser o resultado

.collect(Collectors.toList());

Page 25: [Devcamp] usando programação funcional agora!

● Collection.steam()● Arrays.stream(Object[])● Stream.of(Object[])● IntStream.range(int, int)● IntStream.rangeClosed(int, int)● BufferedReader.lines()● Files.list(path)●

Estrutura inicial

Page 26: [Devcamp] usando programação funcional agora!

● filter● map● sorted● flatMap● flatMapDouble● limit● skip● etc

Estrutura intermediária

Page 27: [Devcamp] usando programação funcional agora!

● collect● max● mim● sum● count● toArray● allMatch● anyMatch● etc

Estrutura final

Page 28: [Devcamp] usando programação funcional agora!

● sorted● unsorted● distinct● parallel● sequential

Estruturas auxiliares

Page 29: [Devcamp] usando programação funcional agora!

Considerando as funções...

Page 30: [Devcamp] usando programação funcional agora!
Page 31: [Devcamp] usando programação funcional agora!
Page 32: [Devcamp] usando programação funcional agora!
Page 33: [Devcamp] usando programação funcional agora!
Page 34: [Devcamp] usando programação funcional agora!

E o paralelismo que comentei?!

Page 35: [Devcamp] usando programação funcional agora!
Page 36: [Devcamp] usando programação funcional agora!
Page 37: [Devcamp] usando programação funcional agora!
Page 38: [Devcamp] usando programação funcional agora!

Face the brutal facts!

Page 39: [Devcamp] usando programação funcional agora!
Page 40: [Devcamp] usando programação funcional agora!

Saia daqui hoje, e use na segunda!

Page 41: [Devcamp] usando programação funcional agora!

● Comparator <-> <java>● Function <-> Transform● Predicate <-> Predicate*● Consumer <-> Closure● Collector <-> (CollectionUtils.select...)● Criar Nova <-> -

Java8 vs Commons Collection

Page 42: [Devcamp] usando programação funcional agora!

akie

ras@

cian

dt.c

om

CollectionUtils

Traz "métodos" comuns em linguagens funcionais:

● Collection collect(Collection c, Transformer t)● boolean exists(Collection c, Predicate p)● void filter(Collection c, Predicate p)● Object find(Collection c, Predicate p)● void forAllDo(Collection c, Closure cl)● Collection select(Collection c, Predicate p)● Collection selectRejected(Collection c, Predicate p)● void transform(Collection c, Transformer t)

Page 43: [Devcamp] usando programação funcional agora!

akie

ras@

cian

dt.c

om

Page 44: [Devcamp] usando programação funcional agora!

akie

ras@

cian

dt.c

om

Page 45: [Devcamp] usando programação funcional agora!

akie

ras@

cian

dt.c

om

Page 46: [Devcamp] usando programação funcional agora!

akie

ras@

cian

dt.c

om

Page 47: [Devcamp] usando programação funcional agora!

akie

ras@

cian

dt.c

om

Page 48: [Devcamp] usando programação funcional agora!

akie

ras@

cian

dt.c

om

Page 49: [Devcamp] usando programação funcional agora!

Nem tudo são flores

Page 50: [Devcamp] usando programação funcional agora!

Mudança de paradigma é árduo

Page 51: [Devcamp] usando programação funcional agora!

Em alguns casos precisamos de estado

Page 52: [Devcamp] usando programação funcional agora!

Por que me apaixonei?!

Page 53: [Devcamp] usando programação funcional agora!

Código mais expressivo.

Page 54: [Devcamp] usando programação funcional agora!

Legibilidade.

Page 55: [Devcamp] usando programação funcional agora!

Testes, teste, teste.

Page 56: [Devcamp] usando programação funcional agora!

Resumindo

Page 57: [Devcamp] usando programação funcional agora!
Page 58: [Devcamp] usando programação funcional agora!

THANKS FOR

BEINGHERE!