Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Programación Funcional con Scala

Rebecca
September 25, 2013

Programación Funcional con Scala

Una charla por Quito Lambda

Rebecca

September 25, 2013
Tweet

More Decks by Rebecca

Other Decks in Programming

Transcript

  1. Funciones de orden superior! Funciones que tienen otra función como

    parametro! Funciones que retornan una función!
  2. Funciones de orden superior! object Almuerzo {! "def main(args: Array[String])

    {! " "println( apply( postre, 50) )! "}! ! "def apply(f: Int => String, v: Int) = f(v)! ! "def postre(x: Int) = “Comi “ + x.toString() + “ frutas.”! }! !
  3. Funciones de orden superior! Comi 50 frutas.! object Almuerzo {!

    "def main(args: Array[String]) {! " "println( apply( postre, 50) )! "}! ! "def apply(f: Int => String, v: Int) = f(v)! ! "def postre(x: Int) = “Comi “ + x.toString() + “ frutas.”! }! !
  4. Evaluación estricta! scala> val a = b + 1; val

    b = 2;! a: Int = 1! b: Int = 2! ! !
  5. Evaluación estricta! perezosa! scala> lazy val a = b +

    1; lazy val b = 2;! a: Int = <lazy>! b: Int = <lazy>! ! scala> a! res1: Int = 3! ! scala> b! res1: Int = 2! ! !
  6. Currying! scala> def add(a: Int)(b: Int) = a + b!

    add: (a: Int)(b: Int)Int! ! scala> add(5)(6)! res1: Int = 11! !
  7. Currying! scala> def add(a: Int)(b: Int) = a + b!

    add: (a: Int)(b: Int)Int! ! scala> add(5)(6)! res1: Int = 11! ! scala> val addTen = add(10)_! addTen: Int => Int = <function>! !
  8. Currying! scala> def add(a: Int)(b: Int) = a + b!

    add: (a: Int)(b: Int)Int! ! scala> add(5)(6)! res1: Int = 11! ! scala> val addTen = add(10)_! addTen: Int => Int = <function>! ! scala> addTen(6)! res2: Int = 16!
  9. Combinadores Funcionales! scala> val numeros = List(1,2,3)! numeros: List[Int] =

    List(1, 2, 3)! ! scala> numeros.map((i: Int) => i * 3))! res1: List[Int] = List(3, 6, 9)! ! !
  10. Combinadores Funcionales! scala> val numeros = List(1,2,3)! numeros: List[Int] =

    List(1, 2, 3)! ! scala> numeros.partition(_ +1 == 3))! res1: (List[Int], List[Int]) = (List(2),List(1, 3))! ! !
  11. Tipado estático! *la inferencia de tipos! scala> val x :

    Int = 1 + 2! x: Int = 3! ! ! ! scala> val x = 1 + 2! x: Int = 3! ! ! !
  12. Cuando la inferencia no funciona…! scala> def factorial(n: Int) =

    {! | if (n == 0) 1! | else n * factorial(n – 1)! | }! ! ! <console>:1: error: recursive method factorial needs result type! else n * factorial(n – 1)! " " " " ^! ! !
  13. Cuando la inferencia no funciona…! scala> def factorial(n: Int) =

    {! | if (n == 0) 1! | else n * factorial(n – 1)! | }! ! scala> def factorial(n: Int) : Int = {! | if (n == 0) 1! | else n * factorial(n – 1)! | }! Factorial: (n: Int)Int! ! !
  14. trait Pelicula {! "val tipo: String ! } ! !

    class Comedia extends Pelicula {! "val tipo = “comedia”! }! ! Traits!
  15. trait Pelicula {! "val tipo: String! } ! ! class

    Comedia extends Pelicula with Tiempo {! "val tipo = “comedia”! "val longitud = 90! }! ! Traits! trait Tiempo {! "val longitud: Int! } ! !