Skip to content

Commit 582abf5

Browse files
committed
Tutorials - Translation PT-BR - Currying
1 parent 6316f7f commit 582abf5

File tree

1 file changed

+43
-0
lines changed

1 file changed

+43
-0
lines changed

pt-br/tutorials/tour/currying.md

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
---
2+
layout: tutorial
3+
title: Currying
4+
5+
disqus: true
6+
7+
tutorial: scala-tour
8+
num: 9
9+
tutorial-next: case-classes
10+
tutorial-previous: nested-functions
11+
language: pt-br
12+
---
13+
14+
_Nota de tradução: Currying é uma técnica de programação funcional nomeada em honra ao matemático e lógico Haskell Curry. Por essa razão a palavra Currying não será traduzida. Entende-se que é uma ação, uma técnica básica de Programação Funcional._
15+
16+
Métodos podem definir múltiplas listas de parâmetros. Quando um método é chamado com uma lista menor de parâmetros, então será retornada uma função que recebe a lista que parâmetros que falta como argumentos.
17+
18+
Aqui um exemplo:
19+
20+
```tut
21+
object CurryTest extends App {
22+
23+
def filter(xs: List[Int], p: Int => Boolean): List[Int] =
24+
if (xs.isEmpty) xs
25+
else if (p(xs.head)) xs.head :: filter(xs.tail, p)
26+
else filter(xs.tail, p)
27+
28+
def modN(n: Int)(x: Int) = ((x % n) == 0)
29+
30+
val nums = List(1, 2, 3, 4, 5, 6, 7, 8)
31+
println(filter(nums, modN(2)))
32+
println(filter(nums, modN(3)))
33+
}
34+
```
35+
36+
_Nota: o método `modN` é parcialmente aplicado em duas chamadas de `filter`; por exemplo: somente o primeiro argumento é realmente aplicado. O termo `modN(2)` retorna uma função do tipo `Int => Boolean` e esta se torna uma possível candidata a segundo argumento da função `filter`._
37+
38+
A saída do programa acima produz:
39+
40+
```
41+
List(2,4,6,8)
42+
List(3,6)
43+
```

0 commit comments

Comments
 (0)