TDC 2014 - Java 8: Expressões Lambda e API de StreamDanival Calegari
Apresentação feita no evento The Developers Conference 2014 na trilha de Java sobre duas das principais novidades do Java 8: as Expressões Lambda e a API de Streams. As Expressões Lambda aumenta o poder de expressão da linguagem através de uma nova forma de implementar interfaces funcionais (interfaces com um único método) de forma mais fácil do que com classes anônimas e a API de Streams traz funcionalidades usadas de forma fluente e poderosa para manipular conjuntos de objetos.
9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos...Manuel Menezes de Sequeira
Fundamentos da Programação 9:
• Operação toString()
• Classes, instâncias e objectos
• Leituras com Scanner
Apresentação 9 da unidade curricular de Fundamentos de Programação da Universidade Europeia. Alterações de Manuel Menezes de Sequeira sobre versão original por vários autores do DCTI do ISCTE-IUL, incluindo Luís Nunes, Ricardo Ribeiro, André Santos e o próprio Manuel Menezes de Sequeira.
TDC 2014 - Java 8: Expressões Lambda e API de StreamDanival Calegari
Apresentação feita no evento The Developers Conference 2014 na trilha de Java sobre duas das principais novidades do Java 8: as Expressões Lambda e a API de Streams. As Expressões Lambda aumenta o poder de expressão da linguagem através de uma nova forma de implementar interfaces funcionais (interfaces com um único método) de forma mais fácil do que com classes anônimas e a API de Streams traz funcionalidades usadas de forma fluente e poderosa para manipular conjuntos de objetos.
9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos...Manuel Menezes de Sequeira
Fundamentos da Programação 9:
• Operação toString()
• Classes, instâncias e objectos
• Leituras com Scanner
Apresentação 9 da unidade curricular de Fundamentos de Programação da Universidade Europeia. Alterações de Manuel Menezes de Sequeira sobre versão original por vários autores do DCTI do ISCTE-IUL, incluindo Luís Nunes, Ricardo Ribeiro, André Santos e o próprio Manuel Menezes de Sequeira.
Agenda:
- Plataforma de compiladores .NET & Visual Studio 2015
- Plataforma de compiladores .NET (“Roslyn”)
- Evolução do projeto “Roslyn”
- Linha de produtos comerciais do Visual Studio 2015
- Linha de produtos gratuitos do Visual Studio 2015
- Visual Studio Online e Visual Studio Code
- Visual Studio 2015 RTM
- Novidades da linguagem de programação C# 6
- Construtores primários (C# 7)
- Avanços em propriedades automáticas
- Atribuição de propriedades automáticas somente com get no construtor
- using estático
- await em blocos catch e finally
- Filtros de exceção
- Operadores nulos-condicionais
- Expressões nameof
- Expressões de declaração (C# 7)
- Expressões de corpo em membros de função
- Iniciadores de índice
- Literais binários e separadores de dígitos (C# 7)
- Interpolação de strings
- Ferramentas e documentação
- Recursos adicionais
10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...Manuel Menezes de Sequeira
Fundamentos da Programação 10:
• Encapsulação
• Cópia de instâncias
• Igualdade de instâncias
Apresentação 10 da unidade curricular de Fundamentos de Programação da Universidade Europeia. Alterações de Manuel Menezes de Sequeira sobre versão original por vários autores do DCTI do ISCTE-IUL, incluindo Luís Nunes, Ricardo Ribeiro, André Santos e o próprio Manuel Menezes de Sequeira.
Por que GraphQL vem ganhando força na comunidade de desenvolvedores?
Quais problemas o GraphQL pretende resolver?
Quais as boas práticas no uso de GraphQL?
Quais as armadilhas na adoção de GraphQL?
Dismistificando as dúvidas comuns relacionadas a GraphQL.
Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...Tchelinux
Escrever um bom código, legível, eficiente e seguro, é uma competência necessária para codificar em qualquer linguagem. O objetivo é abordar técnicas de refatoração, boas práticas, código seguro e testes, utilizando exemplos com a linguagem Java. A bibliografia indicada é Refatoração, do Martin Fowler, e Effective Java do Joshua Bloch.
No processo de aprendizagem de uma linguagem de programação, vamos, certamente, nos deparar com o tratamento de Arrays.
Em Javascript, C# e em outras linguagens de programação, temos três recursos que são muito importantes para trabalharmos com eles: map, filter e reduce.
Agenda:
- Plataforma de compiladores .NET & Visual Studio 2015
- Plataforma de compiladores .NET (“Roslyn”)
- Evolução do projeto “Roslyn”
- Linha de produtos comerciais do Visual Studio 2015
- Linha de produtos gratuitos do Visual Studio 2015
- Visual Studio Online e Visual Studio Code
- Visual Studio 2015 RTM
- Novidades da linguagem de programação C# 6
- Construtores primários (C# 7)
- Avanços em propriedades automáticas
- Atribuição de propriedades automáticas somente com get no construtor
- using estático
- await em blocos catch e finally
- Filtros de exceção
- Operadores nulos-condicionais
- Expressões nameof
- Expressões de declaração (C# 7)
- Expressões de corpo em membros de função
- Iniciadores de índice
- Literais binários e separadores de dígitos (C# 7)
- Interpolação de strings
- Ferramentas e documentação
- Recursos adicionais
10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...Manuel Menezes de Sequeira
Fundamentos da Programação 10:
• Encapsulação
• Cópia de instâncias
• Igualdade de instâncias
Apresentação 10 da unidade curricular de Fundamentos de Programação da Universidade Europeia. Alterações de Manuel Menezes de Sequeira sobre versão original por vários autores do DCTI do ISCTE-IUL, incluindo Luís Nunes, Ricardo Ribeiro, André Santos e o próprio Manuel Menezes de Sequeira.
Por que GraphQL vem ganhando força na comunidade de desenvolvedores?
Quais problemas o GraphQL pretende resolver?
Quais as boas práticas no uso de GraphQL?
Quais as armadilhas na adoção de GraphQL?
Dismistificando as dúvidas comuns relacionadas a GraphQL.
Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...Tchelinux
Escrever um bom código, legível, eficiente e seguro, é uma competência necessária para codificar em qualquer linguagem. O objetivo é abordar técnicas de refatoração, boas práticas, código seguro e testes, utilizando exemplos com a linguagem Java. A bibliografia indicada é Refatoração, do Martin Fowler, e Effective Java do Joshua Bloch.
No processo de aprendizagem de uma linguagem de programação, vamos, certamente, nos deparar com o tratamento de Arrays.
Em Javascript, C# e em outras linguagens de programação, temos três recursos que são muito importantes para trabalharmos com eles: map, filter e reduce.
Minicurso de Django - Desenvolvimento ágil web com Django e PythonGuilherme Garcia
Minicurso de Django 1.10 com a criação de um projeto completo em Django e conteúdos sobre:
Introdução a Python, Autenticação de usuários Django, Relacionamentos de classes do Django. Templates, etc.
Apresentação realizada na reunião de 26 de junho de 2019 do Atlassian User Group de São Paulo. Demonstração de como a interface REST dos produtos da plataforma Atlassian podem ser considerados como alternativas aos APPS e a tarefas manuais pela interface Web. Ao final há um exemplo onde a opção de utilizar a interface REST economizou tempo e dinheiro e entregou o trabalho feito
Semelhante a Programação Funcional com Java 8 (20)
4. “The functional style is not counter to
object-oriented programming (OOP). The real
paradigm shift is from the imperative to
the declarative style of programming. With
Java 8, we can now intermix functional
and OO styles of programming quite
effectively. We can continue to use the OOP
style to model domain entities, their states, and their
relationships. In addition, we can model the behavior
or state transformations, business workflows, and
data processing as a series of functions to form a
function composition.”
5. O que realmente muda no nosso
dia-a-dia usando programação
funcional com Java 8?
6. Ordenando e exibindo uma lista
for (Jogador jogador : listaJogadores) {
if (Posicao.ATACANTE.equals(jogador.getPosicao())) {
listaAtacantes.add(jogador);
}
}
Collections.sort(listaAtacantes, new Comparator<Atletas>() {
@Override
public int compare(Jogador j1, Jogador j2) {
return j1.getNome().compareTo(j2.getNome());
}
});
for (Jogador jogador : listaAtacantes) {
System.out.println(jogador);
} 6
7. Ordenando e exibindo uma lista
listaJogadores.removeIf(jogador -> !Posicao.ATACANTE.equals(jogador.getPosicao()));
listaJogadores.sort((a1, a2) -> a1.getNome().compareTo(a2.getNome()));
listaJogadores.forEach(System.out::println);
7
8. // Java 8
listaJogadores.sort((j1, j2) -> j1.getNome().compareTo(j2.getNome()));
Collections.sort(listaAtacantes, new Comparator<Jogador>() {
@Override
public int compare(Jogador j1, Jogador j2) {
return j1.getNome().compareTo(j2.getNome());
}
});
8
9. // Java 8
listaJogadores.sort((j1, j2) -> j1.getNome().compareTo(j2.getNome()));
Collections.sort(listaAtacantes, new Comparator<Jogador>() {
@Override
public int compare(Jogador j1, Jogador j2) {
return j1.getNome().compareTo(j2.getNome());
}
});
9
10. // Java 8
listaJogadores.sort((j1, j2) -> j1.getNome().compareTo(j2.getNome()));
Collections.sort(listaAtacantes, new Comparator<Jogador>() {
@Override
public int compare(Jogador j1, Jogador j2) {
return j1.getNome().compareTo(j2.getNome());
}
});
10
11. // Java 8
listaJogadores.removeIf(jogador -> !Posicao.ATACANTE.equals(jogador.getPosicao()));
for (Jogador jogador : listaJogadores) {
if (Posicao.ATACANTE.equals(jogador.getPosicao())) {
listaAtacantes.add(jogador);
}
}
11
15. 15
+ legibilidade de código
+ foco no negócio
+ código mais expressivo
+ facilidade de paralelizar o código
- probabilidade de erro
- código imperativo
- mutabilidade
16. O que vamos ver então?
Lambda
Functional interfaces
Method reference
Default methods
Collections API
Streams
16
17. ● Anonima
○ não possui nome
● Função
○ não é vinculada a classe
● Concisa
○ não possui código boilerplate
● Pode ser repassada
○ como argumento ou variável
Lambda Expression
17
18. Anonymous class:
Collections.sort(listaAtacantes, new Comparator<Jogador>() {
@Override
public int compare(Jogador j1, Jogador j2) {
return j1.getNome().compareTo(j2.getNome());
}
});
Lambda:
listaJogadores.sort((j1, j2) -> j1.getNome().compareTo(j2.getNome()));
Lambda Expression
18
24. Comparator<Jogador> c1 = (Jogador j1, Jogador j2) ->
a1.getNome().compareTo(a2.getNome());
Predicate<Jogador> pre = (Jogador j1) -> a1.getNome().startsWith("N");
Object o = (Jogador a1, Jogador a2) ->
a1.getNome().compareTo(a2.getNome());
Atribuindo Lambda para variável
//The target type of this expression must be a functional interface
24
25. ● Interface com 1 único método abstrato
○ Default Methods
● @FunctionalInterface
Functional Interfaces
25
29. // Sem Type Inference
Comparator<Jogador> c1 = (Jogador a1, Jogador a2) ->
a1.getNome().compareTo(a2.getNome());
// Com Type Inference
Comparator<Jogador> c1 = (a1, a2) -> a1.getNome().compareTo(a2.getNome());
Type inference
29
30. Mesma Lambda, diferentes Functional Interfaces
30
● Mesma Lambda, duas Functional Interface diferentes
Comparator<Jogador> c =
(a1, a2) -> a1.getNome().compareTo(a2.getNome());
BiFunction<Jogador, Jogador, Integer> c =
(a1, a2) -> a1.getNome().compareTo(a2.getNome());
31. 31
Dois métodos com mesmo nome, recebendo diferentes Functional Interfaces, porém que
aceitam a mesma Lambda
private void testTypeChecking(BiFunction<Jogador, Jogador, Integer> lambda)
private void testTypeChecking(Comparator<Jogador> lambda)
Ao chamar o método
testTypeChecking((a1, a2) -> a1.getNome().compareTo(a2.getNome()));
o compilador apresenta o erro:
The method testTypeChecking(Comparator<Jogador>) is ambiguous for the type class ...
32. 32
● … porém se passarmos o objeto comp o compilador
sabe qual método chamar
Comparator<Jogador> comp =
(a1, a2) -> a1.getNome().compareTo(a2.getNome());
testTypeChecking(comp);
39. Method References
● Permite referenciar métodos ou construtores usando ::
● Como se fosse uma abreviação de uma lambda, chamando somente um
método
Lambda:
Consumer<String> consumer = (String s) -> System.out.println(s)
Method Reference:
Consumer<String> consumer = System.out::println
39
88. N = tamanho da coleção
Q = custo por elemento no pipeline da stream
N x Q = custo total do pipeline
quanto maior N x Q melhor será a execução em paralelo
88
Simon Ritter
Oracle Java Technology Evangelist
89. Referências
Java 8 in Action
Lambdas, streams, and functional-style
programming
Functional Programming in Java
Introducing Java 8
A Quick-Start Guide to Lambdas and
Streams
Java 8 Prático
Lambdas, Streams e os novos recursos da
linguagem