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
Interfaces funcionais são um novo tipo de Interface do Java. Nesta seção serão apresentados os conceitos e na seção de <<book/04-lambda/sections/02-lambda-expression.asc#lambda-expression,Expressões Lambda>> será possível ver como utilizá-las.
11
+
Functional interfaces are a new type of Java Interface. In this section the concepts will be presented and in the <<book/04-lambda/sections/02-lambda-expression.asc#lambda-expression,Lambda Expressions>> section you will see how to use them.
14
12
15
-
. Interfaces Funcionais são aquelas que possuem apenas um método abstrato, chamado de "método funcional".
16
-
. É recomendada a utilização da anotação `@FunctionalInterface`, mas não obrigatório.
13
+
. Functional Interfaces are those that have only one abstract method, called the "functional method".
14
+
. The use of the `@FunctionalInterface` annotation is recommended, but not required.
A anotação `@FunctionalInterface` garante, em tempo de compilação, que esta interface é funcional. Também indica para outros desenvolvedores que ela foi criada com o intuito de ser utilizada em expressões lambda, e por isso não se deve criar outros métodos abstratos dentro dela.
22
+
The `@FunctionalInterface` annotation ensures at compile time that this interface is functional. It also indicates to other developers that it was created for use in lambda expressions, so you should not create other abstract methods within it.
25
23
26
-
. Métodos adicionais que sejam `default` ou `static` não fazem com que a interface deixe de ser funcional.
24
+
. Additional methods that are `default` or `static` don't make the interface to be functional.
Lembre-se que os métodos `static` em interfaces podem ser chamados diretamente, como `Executavel.execute(...)`. Dessa forma, não há interferência no fato da interface ser funcional.
32
+
Remember that `static` methods on interfaces can be called directly, such as `Executable.execute(...)`. Thus, there is no interference in the fact that the interface is functional.
35
33
+
36
-
Por outro lado, os métodos `default` só podem ser chamados caso você possua uma instância da interface, porém eles já possuem uma implementação padrão.
34
+
On the other hand, `default` methods can only be called if you have an instance of the interface, but they already have a default implementation.
37
35
+
38
-
Em caso de dúvidas sobre `static` ou `default` em interfaces, volte na seção de "Métodos _static_ e _default_ em Interfaces".
36
+
If you have questions about `static` or `default` in interfaces, go back to the _"Static and default methods of an interface"_ section.
39
37
40
-
. Sobrescrever na interface um método público de `java.lang.Object` também não faz com que ela deixe de ser funcional.
38
+
. Overriding a public method of `java.lang.Object` in the interface doesn't turn it to a no functional interface.
. Interfaces funcionais são feitas com o intuito de serem utilizadas em expressões lambda, mas o código também irá compilar normalmente caso uma classe a implemente.
86
+
. Functional interfaces are meant to be used in lambda expressions, but the code will also compile normally if a class implements it.
Esse é apenas um exemplo para você saber que essa implementação não gera erro de compilação, mas *não* utilize interfaces funcionais dessa forma. Na seção de Expressões Lambda você verá como as interfaces funcionais devem ser utilizadas na prática.
94
+
This is just an example for you to know that this implementation does not generate compilation errors, but *does not* use functional interfaces in this way. In the Lambda Expressions section, you will see how functional interfaces should be used in practice.
97
95
98
-
==== Interfaces Funcionais do pacote `java.util.function`
96
+
==== Functional Interfaces from `java.util.function` package
99
97
100
-
As interfaces descritas aqui estão disponíveis no pacote `java.util.function`. Nesta seção serão apresentadas apenas suas definições, pois há posteriormente uma seção específica para tratar dos exemplos de cada uma.
98
+
The interfaces described here are available in the `java.util.function` package. This section will present only its definitions, as there is later a specific section to deal with the examples of each.
101
99
102
-
Existem outras interfaces nesse pacote além das listadas aqui, porém são apenas específicas para lidar com tipos primitivos, seguindo as mesmas definições.
100
+
There are other interfaces in this package besides those listed here, but they are only specific to dealing with primitive types, following the same definitions.
103
101
104
-
* `Supplier<T>`: Representa um fornecedor de resultados.
102
+
* `Supplier<T>`: Represents a results provider.
105
103
+
106
-
Um `Supplier` literalmente apenas fornece dados ou resultados para alguém. Um gerador de números sequenciais, por exemplo, pode ser um `Supplier`.
104
+
A `Supplier` literally only provides data or results to someone. A sequential number generator, for example, may be a `Supplier`.
107
105
108
-
* `Consumer<T>`: Representa uma operação que aceita uma única entrada e não possui retorno.
109
-
* `BiConsumer<T,U>`: Representa uma operação que aceita duas entradas e não possui retorno.
106
+
* `Consumer<T>`: Represents an operation that accepts a single entry and has no return.
107
+
* `BiConsumer<T,U>`: Represents an operation that accepts two inputs and has no return.
110
108
+
111
-
Os `Consumer` são praticamente o inverso dos `Supplier`, pois eles apenas recebem dados ou informações e os tratam de alguma forma.
109
+
`Consumers` are pretty much the opposite of `Supplier`, as they only receive data or information and treat them in some way.
112
110
113
-
* `Function<T,R>`: Representa uma função que aceita um argumento e produz um retorno.
114
-
* `BiFunction<T,U,R>`: Representa uma função que aceita dois argumentos e produz um retorno.
111
+
* `Function<T,R>`: Represents a function that accepts an argument and produces a return.
112
+
* `BiFunction<T, U, R>`: Represents a function that takes two arguments and produces a return.
115
113
+
116
-
As `Function` são mais parecidas com as funções que já conhecemos. Elas recebem dados e produzem um retorno.
114
+
The `Function` are more similar to the functions we already know. They receive data and produce a return.
117
115
118
-
* `Predicate<T>`: Representa uma proposição (função de valor booleano) de um argumento.
119
-
* `BiPredicate<T,U>`: Representa uma proposição (função de valor booleano) de dois argumentos.
116
+
* `Predicate<T>`: Represents a proposition (Boolean value function) of an argument.
117
+
* `BiPredicate<T,U>`: Represents a proposition (Boolean value function) of two arguments.
120
118
+
121
-
Os `Predicate` são parecidos com as `Function`, porém sempre retornam um resultado booleano, por isso são utilizados para "testes" de verdadeiro ou falso.
119
+
`Predicate` is similar to `Function`, but always returns a Boolean result, so it is used for true or false "tests".
122
120
123
-
* `UnaryOperator<T>`: Representa uma operação em um único operador que produz um resultado do mesmo tipo dele.
124
-
* `BinaryOperator<T>`: Representa uma operação em dois operadores que produz um resultado do mesmo tipo deles.
121
+
* `UnaryOperator<T>`: Represents an operation on a single operator that produces a result of the same type as it.
122
+
* `BinaryOperator<T>`: Represents an operation on two operators that produces a result of the same type as them.
125
123
+
126
-
Os `Operator` são especializações de `Function`, pois apesar de também sempre recebem e produzirem resultados, as entradas e saídas são sempre do mesmo tipo.
124
+
The `Operator` are `Function` specializations, because although they also always receive and produce results, the inputs and outputs are always the same type.
127
125
128
-
.Referências
126
+
.References
129
127
****
130
128
131
129
* Introducing Functional Programming
132
130
+
133
-
Boyarsky, Jeanne; Selikoff, Scott. OCP: Oracle Certified Professional Java SE 8 Programmer II Study Guide (p. 52). Wiley. Edição do Kindle.
131
+
Boyarsky, Jeanne; Selikoff, Scott. OCP: Oracle Certified Professional Java SE 8 Programmer II Study Guide (p. 52). Wiley. Kindle Edition.
134
132
135
133
* https://www.baeldung.com/java-8-functional-interfaces[Functional Interfaces in Java 8.]
136
134
@@ -140,4 +138,4 @@ Boyarsky, Jeanne; Selikoff, Scott. OCP: Oracle Certified Professional Java SE 8
140
138
141
139
* https://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html[Lambda Expressions.] The Java™ Tutorials.
0 commit comments