Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Pf con scala

1,829 views

Published on

  • Be the first to comment

  • Be the first to like this

Pf con scala

  1. 1. Rebecca Sliter, ThoughtWorks @rebeccasliter con Scala
  2. 2. utiliza el JVM
  3. 3. static-typed utiliza el JVM
  4. 4. static-typed orientado a objetos utiliza el JVM
  5. 5. static-typed orientado a objetos? utiliza el JVM
  6. 6. static-typed orientado a objetos utiliza el JVM
  7. 7. static-typed funcional orientado a objetos utiliza el JVM
  8. 8. static-typed funcional orientado a objetos objeto-funcional utiliza el JVM
  9. 9. funcionalQué hace a este lenguaje?
  10. 10. Funciones de orden superior Funciones que tienen otra función como parametro
  11. 11. Funciones de orden superior Funciones que tienen otra función como parametro Funciones que retornan una función
  12. 12. 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.” }
  13. 13. 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.” }
  14. 14. Evaluación estricta scala> val a = b + 1; val b = 2; a: Int = 1 b: Int = 2
  15. 15. Evaluación estrictaperezosa 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
  16. 16. Currying scala> def add(a: Int)(b: Int) = a + b add: (a: Int)(b: Int)Int
  17. 17. Currying scala> def add(a: Int)(b: Int) = a + b add: (a: Int)(b: Int)Int scala> add(5)(6) res1: Int = 11
  18. 18. 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>
  19. 19. 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
  20. 20. 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)
  21. 21. 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))
  22. 22. Tipado estático
  23. 23. Tipado estático *la inferencia de tipos
  24. 24. Tipado estático *la inferencia de tipos scala> val x : Int = 1 + 2 x: Int = 3
  25. 25. Tipado estático *la inferencia de tipos scala> val x : Int = 1 + 2 x: Int = 3 scala> val x = 1 + 2 x: Int = 3
  26. 26. 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) ^
  27. 27. 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
  28. 28. orientado a objetos funcional objeto-funcional
  29. 29. orientado a objetos objeto-funcional funcional
  30. 30. orientado a objetos Qué hace a este lenguaje?
  31. 31. Traits Colecciones de fields y comportamientos que pueden extend o mixin a sus clases.
  32. 32. trait Pelicula { val tipo: String } Traits
  33. 33. trait Pelicula { val tipo: String } class Comedia extends Pelicula { val tipo = “comedia” } Traits
  34. 34. trait Pelicula { val tipo: String } class Comedia extends Pelicula with Tiempo { val tipo = “comedia” val longitud = 90 } Traits trait Tiempo { val longitud: Int }
  35. 35. Modules
  36. 36. Recursos Scala docs: docs.scala-lang.org Simply Scala: simplyscala.com Scala School: twitter.github.io/scala_school $ sbt console

×