Usando programação
funcional agora!
Rodrigo Domingues
rodrigosd@ciandt.com
Quem sou eu?
● Trabalho com desenvolvimento há 10 anos
● Trabalho com Java há 8 anos
● Arquiteto de Software na CI&T
● Ner...
Programação Funcional
101
Java 8
Pensa em uma lista
List<String> herois =
Arrays.asList("Batman", "Super Man", "Iron Man",
"Hulk", "Flash", "Spider Man");
@Test
public void lambda() {
for(String heroi: herois){
System.out.println(heroi);
}
}
@Test
public void lambda() {
herois.forEach(new Consumer<String>() {
public void accept(String heroi) {
System.out.println...
@Test
public void lambda() {
herois.forEach(
(String heroi) -> {
System.out.println(heroi);
}
);
}
@Test
public void lambda() {
herois.forEach(heroi->System.out.println(heroi));
}
@Test
public void lambda() {
herois.forEach(System.out::println);
}
Adicionando magia negra!
● Uma sequência de "trens" que suporta
operações agregadas de forma sequencial
ou paralela
O que é stream
Stream<String> heroisStream = herois.stream();
//Um Stream pode ser dividido em 3 partes
// 1 - Estrutura inicial (resposável por criar o Stream)
herois.stream()
// 2 - ...
● Collection.steam()
● Arrays.stream(Object[])
● Stream.of(Object[])
● IntStream.range(int, int)
● IntStream.rangeClosed(i...
● filter
● map
● sorted
● flatMap
● flatMapDouble
● limit
● skip
● etc
Estrutura intermediária
● collect
● max
● mim
● sum
● count
● toArray
● allMatch
● anyMatch
● etc
Estrutura final
● sorted
● unsorted
● distinct
● parallel
● sequential
Estruturas auxiliares
Considerando as funções...
E o paralelismo que
comentei?!
Face the brutal facts!
Saia daqui hoje, e use na segunda!
● Comparator <-> <java>
● Function <-> Transform
● Predicate <-> Predicate*
● Consumer <-> Closure
● Collector <-> (Collec...
akieras@ciandt.com
CollectionUtils
Traz "métodos" comuns em linguagens
funcionais:
● Collection collect(Collection c, Tran...
akieras@ciandt.com
akieras@ciandt.com
akieras@ciandt.com
akieras@ciandt.com
akieras@ciandt.com
akieras@ciandt.com
Nem tudo são flores
Mudança de paradigma é
árduo
Em alguns casos
precisamos de estado
Por que me apaixonei?!
Código mais expressivo.
Legibilidade.
Testes, teste, teste.
Resumindo
THANKS
FOR
BEING
HERE!
[Devcamp] usando programação funcional agora!
[Devcamp] usando programação funcional agora!
[Devcamp] usando programação funcional agora!
[Devcamp] usando programação funcional agora!
[Devcamp] usando programação funcional agora!
[Devcamp] usando programação funcional agora!
[Devcamp] usando programação funcional agora!
[Devcamp] usando programação funcional agora!
[Devcamp] usando programação funcional agora!
[Devcamp] usando programação funcional agora!
[Devcamp] usando programação funcional agora!
[Devcamp] usando programação funcional agora!
[Devcamp] usando programação funcional agora!
[Devcamp] usando programação funcional agora!
[Devcamp] usando programação funcional agora!
[Devcamp] usando programação funcional agora!
[Devcamp] usando programação funcional agora!
[Devcamp] usando programação funcional agora!
[Devcamp] usando programação funcional agora!
Próximos SlideShares
Carregando em…5
×

[Devcamp] usando programação funcional agora!

651 visualizações

Publicada em

Palestra realizada no DEVCAMP no dia 15/05/2015 a respeito de benefícios da programação funcional e o impacto no dia a dia.

Publicada em: Software
1 comentário
2 gostaram
Estatísticas
Notas
Sem downloads
Visualizações
Visualizações totais
651
No SlideShare
0
A partir de incorporações
0
Número de incorporações
8
Ações
Compartilhamentos
0
Downloads
8
Comentários
1
Gostaram
2
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

[Devcamp] usando programação funcional agora!

  1. 1. Usando programação funcional agora! Rodrigo Domingues rodrigosd@ciandt.com
  2. 2. Quem sou eu? ● Trabalho com desenvolvimento há 10 anos ● Trabalho com Java há 8 anos ● Arquiteto de Software na CI&T ● Nerd rodrigosd@ciandt.com no twitter :(
  3. 3. Programação Funcional 101
  4. 4. Java 8
  5. 5. Pensa em uma lista List<String> herois = Arrays.asList("Batman", "Super Man", "Iron Man", "Hulk", "Flash", "Spider Man");
  6. 6. @Test public void lambda() { for(String heroi: herois){ System.out.println(heroi); } }
  7. 7. @Test public void lambda() { herois.forEach(new Consumer<String>() { public void accept(String heroi) { System.out.println(heroi); } }); }
  8. 8. @Test public void lambda() { herois.forEach( (String heroi) -> { System.out.println(heroi); } ); }
  9. 9. @Test public void lambda() { herois.forEach(heroi->System.out.println(heroi)); }
  10. 10. @Test public void lambda() { herois.forEach(System.out::println); }
  11. 11. Adicionando magia negra!
  12. 12. ● Uma sequência de "trens" que suporta operações agregadas de forma sequencial ou paralela O que é stream
  13. 13. Stream<String> heroisStream = herois.stream();
  14. 14. //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());
  15. 15. ● Collection.steam() ● Arrays.stream(Object[]) ● Stream.of(Object[]) ● IntStream.range(int, int) ● IntStream.rangeClosed(int, int) ● BufferedReader.lines() ● Files.list(path) ● Estrutura inicial
  16. 16. ● filter ● map ● sorted ● flatMap ● flatMapDouble ● limit ● skip ● etc Estrutura intermediária
  17. 17. ● collect ● max ● mim ● sum ● count ● toArray ● allMatch ● anyMatch ● etc Estrutura final
  18. 18. ● sorted ● unsorted ● distinct ● parallel ● sequential Estruturas auxiliares
  19. 19. Considerando as funções...
  20. 20. E o paralelismo que comentei?!
  21. 21. Face the brutal facts!
  22. 22. Saia daqui hoje, e use na segunda!
  23. 23. ● Comparator <-> <java> ● Function <-> Transform ● Predicate <-> Predicate* ● Consumer <-> Closure ● Collector <-> (CollectionUtils.select...) ● Criar Nova <-> - Java8 vs Commons Collection
  24. 24. akieras@ciandt.com 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)
  25. 25. akieras@ciandt.com
  26. 26. akieras@ciandt.com
  27. 27. akieras@ciandt.com
  28. 28. akieras@ciandt.com
  29. 29. akieras@ciandt.com
  30. 30. akieras@ciandt.com
  31. 31. Nem tudo são flores
  32. 32. Mudança de paradigma é árduo
  33. 33. Em alguns casos precisamos de estado
  34. 34. Por que me apaixonei?!
  35. 35. Código mais expressivo.
  36. 36. Legibilidade.
  37. 37. Testes, teste, teste.
  38. 38. Resumindo
  39. 39. THANKS FOR BEING HERE!

×