Skip to content

Commit 38e8ce7

Browse files
committed
Tutorials - Translation PT-BR - High Order Func
1 parent e94a7dd commit 38e8ce7

File tree

1 file changed

+42
-0
lines changed

1 file changed

+42
-0
lines changed
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
---
2+
layout: tutorial
3+
title: Funções de ordem superior
4+
5+
disqus: true
6+
7+
tutorial: scala-tour
8+
num: 7
9+
tutorial-next: nested-functions
10+
tutorial-previous: anonymous-function-syntax
11+
language: pt-br
12+
---
13+
14+
Scala permite definir funções de ordem superior. Tais funções _recebem outras como parâmetros_, as quais _o resultado é outra função_. Por exemplo, a função `apply` recebe outra função `f` e um valor `v` então aplica a função `f` em`v`:
15+
16+
```tut
17+
def apply(f: Int => String, v: Int) = f(v)
18+
```
19+
20+
_Nota: métodos são automaticamente convertidos em funções se o contexto demandar.**_
21+
22+
Outro exemplo:
23+
24+
```tut
25+
class Decorator(left: String, right: String) {
26+
def layout[A](x: A) = left + x.toString() + right
27+
}
28+
29+
object FunTest extends App {
30+
def apply(f: Int => String, v: Int) = f(v)
31+
val decorator = new Decorator("[", "]")
32+
println(apply(decorator.layout, 7))
33+
}
34+
```
35+
36+
A execução produz a saída:
37+
38+
```
39+
[7]
40+
```
41+
42+
Nesse exemplo, o método `decorator.layout` é automaticamente convertido em um valor do tipo `Int => String` conforme o método `apply` demanda. Note que o método `decorator.layout` é um _método polimórfico_ (por exemplo: ele abstrai alguns tipos de sua assinatura) e o compilador Scala precisa primeiro instanciar corretamento o tipo do método.

0 commit comments

Comments
 (0)