You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: book/04-lambda/sections/02-lambda-expression.asc
+105Lines changed: 105 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -10,13 +10,118 @@ Describe a lambda expression; refactor the code that uses an anonymous inner cla
10
10
Descrever uma expressão lambda; refatorar código que usa classes anônimas internas para usar expressões lambda; descrever a inferência de tipos e tipos esperados.
Expressões Lambda são parecidos com classes anônimas, porém só possuem a implementação dos métodos. Por isso, são como "métodos anônimos", que podem ser passados via variáveis.
14
+
15
+
A expressão lambda possui 3 partes:
16
+
17
+
* Uma lista de parâmetros, separados por vírgula; algumas vezes possui parênteses; algumas vezes possui o tipo das variáveis.
18
+
* O "arrow token", que sempre é escrito como `\->`
19
+
* Um corpo, que pode ou não estar entre chaves; pode possuir mais de uma linha; algumas vezes possui um `return`; algumas vezes possui ponto e vírgula.
20
+
21
+
Exemplos de expressões lambda:
22
+
23
+
* `i -> System.out.println(i)`
24
+
* `(Integer i) -> System.out.println(i)`
25
+
* `(Integer i) -> { System.out.println(i); }`
26
+
* `(Integer i) -> { return i + 1; }`
27
+
* `(i, j, k) -> { return i + j + k; }`
28
+
* `(i, j, k) -> System.out.println(i + j + k)`
29
+
* `() -> System.out.println("nada")`
30
+
31
+
. Expressões lambda podem ser entendidas como uma forma diferente de declarar classes anônimas.
Veja que no exemplo acima é instanciada uma `Thread` com uma instância anônima de `Runnable`. Na segunda parte, é feito a mesma coisa de forma muito mais simples utilizando uma expressão lambda.
40
+
41
+
. Declarações de expressões lambda podem ser completas ou simplificadas.
Perceba que o compilador identifica que a variável `x3` é alterada no final do método, e por isso não permite que ela seja utilizada na expressão lambda.
93
+
94
+
. Em situações de ambiguidade, o compilador tenta descobrir o tipo da expressão lambda utilizando o contexto.
No exemplo anterior, como as duas interfaces funcionais possuem métodos com retorno `void`, o compilador não sabe qual das duas está sendo instanciada na expressão lambda, e ocorre erro de compilação. A expressão lambda, nesse exemplo, poderia ser tanto do tipo `Piloto` quanto `Corredor`, e não há como o compilador descobrir qual o desenvolvedor de fato quis utilizar.
113
+
13
114
.Referências
14
115
****
15
116
16
117
* Implementing Functional Interfaces with Lambdas
17
118
+
18
119
Boyarsky, Jeanne; Selikoff, Scott. OCP: Oracle Certified Professional Java SE 8 Programmer II Study Guide (p. 55). Wiley. Edição do Kindle.
19
120
121
+
* Using Variables in Lambdas
122
+
+
123
+
Boyarsky, Jeanne; Selikoff, Scott. OCP: Oracle Certified Professional Java SE 8 Programmer II Study Guide (p. 172). Wiley. Edição do Kindle.
124
+
20
125
* https://www.baeldung.com/java-8-lambda-expressions-tips[Lambda Expressions and Functional Interfaces: Tips and Best Practices.]
21
126
22
127
* https://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html[Lambda Expressions.] The Java™ Tutorials.
0 commit comments