pensamento funcional

&
currying


por rodolfo ferreira







pensamento funcional

 
?
 

"functions
as
first-class citizens"

 

functions 
as
building blocks

 

design 
granular

 

separar o problema em pequenas partes

Exemplo


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
}

 

+ reuso

val rodar = until( x => x > 10, x => x + x)    
val y = rodar(2)

Currying

 

aplicação parcial

 

execução aos poucos




EXEMPLO


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)
}




USANDO


val doubleEveryNumber = walk( x => x * 2)

val doubledListFrom10To50 = doubleEveryNumber(10, 50)

 

compondo blocos
reutilizáveis
para um programa maior




obrigado!

https://slid.es/rodolfoferreira/pensamento-funcional-currying

Pensamento funcional & Currying

By Rodolfo Ferreira

Pensamento funcional & Currying

  • 903