"functions
as
first-class citizens"
functions
as
building blocks
design
granular
separar o problema em pequenas partes
def until( cond: Int => Boolean, transf: Int => Int): Int => Int = {
def anon(x: Int): Int =
if( cond(x) ) x
else until( cond, transf )( transf(x) )
anon
}
val rodar = until( x => x > 10, x => x + x)
val y = rodar(2)
aplicação parcial
execução aos poucos
def walk(map: Int => Int)(a: Int, b: Int): List[Int] = {
def walkAcc(map: Int => Int, a: Int, b: Int, acc: List[Int]) =
if(a > b) acc
else walkAcc(map, a + 1, b, acc :+ map(a))
walkAcc(map, a, b, Nil)
}
val doubleEveryNumber = walk( x => x * 2)
val doubledListFrom10To50 = doubleEveryNumber(10, 50)
compondo blocos
reutilizáveis
para um programa maior