"functions as first-class citizens"
functions asbuilding 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)
val doubleEveryNumber = walk( x => x * 2)
val doubledListFrom10To50 = doubleEveryNumber(10, 50)
compondo blocosreutilizáveispara um programa maior
By Rodolfo Ferreira