Your SlideShare is downloading. ×
Pf con scala
Pf con scala
Pf con scala
Pf con scala
Pf con scala
Pf con scala
Pf con scala
Pf con scala
Pf con scala
Pf con scala
Pf con scala
Pf con scala
Pf con scala
Pf con scala
Pf con scala
Pf con scala
Pf con scala
Pf con scala
Pf con scala
Pf con scala
Pf con scala
Pf con scala
Pf con scala
Pf con scala
Pf con scala
Pf con scala
Pf con scala
Pf con scala
Pf con scala
Pf con scala
Pf con scala
Pf con scala
Pf con scala
Pf con scala
Pf con scala
Pf con scala
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Pf con scala

1,403

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,403
On Slideshare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
1
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide
  • Hola! Me llamo Rebecca y soy desarolladora en ThoughtWorks. Estanocheyoquierohablar de la programaciónfuncional con Scala.
  • Peroprimeramente… queesScala?Scalautiliza el Maquina Virtual de Java. Puedencorrerlo en el JVM y utilizalasbibliotecas de Java en el código de Scala.
  • Scalatiene un tipadoestático. Vamos a hablar de eso unpoco mas tarde.
  • Scalaesorientado a objetos. Pero…..
  • Estacharlaessobre la programacianfuncional, no?Scalaesorientado a objetosporquetodos los valores son objetos. Scalaorganizasucompartamiento con clases; y, finalmente, puedeutilizarse con Java y C#-- dos lenguajesque son orientados a objetos.
  • Entonces,si. Scalaesorientado a objetos
  • PeroScalaestambíenfuncional.
  • Porestarazón, escomúnllamarestelenguajeobjeto-funcional.Estosignificaque el lenguajetienepropiedadesque lo hacenfuncional, peropuedencrearobjetosparaorganizarsucódigo.
  • Entonces, me gustariacentrarme enalgunascaracterísticasquehacenfuncional a un lenguaje.Y, particularmente, quehacefuncional a Scala.
  • Scalatienefunciones de orden superior.Estosignifica dos cosas:Los funciones de orden superior son funcionesquetienen OTRA funcióncomoparametro
  • Y, pues,lasfunciones de orden superior son funcionesqueretornanunafunción.
  • Comoaquí!(PAUSE)Aquí, tenemos un objeto, que se llama Almuerzo.Además del método main, Almuerzotiene dos metodos. Existe un métodoque se llama “apply.” apply tiene dos parametros: unafuncíon,”f”, y un Int.El método “apply” llama a su primer parametro, la funcíon, con el otro, el Int.
  • El método “main” dice que “apply” va a llamar a “entrada” con 50 como el segundoparametro.El resultadoestáabajo.
  • Scalatiene dos tipos de evaluación: perezosa y estricta. Evaluaciónestrictaes el default en Scala.Con evaluaciónestricta, necesitandeclararlasexpresiónes antes de utilizarlas.En esteejemplo, la variable, “b,” no esdeclarada antes de utilizarla. El compilador no sabesu valor, entonces, no puedeevaluarla.
  • Podemosutilizarevaluaciónperezosatambíen. Evaluaciónperezosaescomún en laprogramaciónfunciónalporqueesposiblecrearlaslistasinfinitivas sin preocuparsepor el tamaño.Evaluaciónperezosasignificaquelasexpresiónes no se evalúan hasta que se necesitan.En Scala, siqueremosutilizarevaluaciónperezosa, necesitamosutilizar la palabra “lazy.”Algunoslenguajes son “purosperezosos,” quesignificaquetodaslasevaluaciónes son en-demanda. Con Scala, podemosutilizarlas dos.
  • A vecesquierenpasaralgunosargumentos a unafunciónahora y algunosmástarde.Este concepto se llama “currying”Aquítenemosunafunciónque se llama “add”. Esimportantenotarque “add” tiene dos listas de parametros.
  • Cuandoqueremosañadir 5 y 6, porejemplo, podemospasar los argumentoscomoeso.Chevere, sí? Ahoraqueremoscrearotrafunción, “añadirdiez.”Y queremosutilizar la función add.
  • Aquíutilizamos la función add y un guiónbajoparaaplicarparcialmente el segundoargumento.
  • addTen solo tiene un argumento. NotanqueaddTenretorno un funciónqueva a tomar el segundoargumentocomo un argumento.
  • Scalatambiéntienemuchasfunciónesquienecambiotodos los miembros de unacolección. Estes son llamas combinadoresfuncionales.Map, porejemplo, ejecutaunafunción en unalista.
  • “Partition” puededividirunalista de acuerdo con un predicado.El valor de retornoes dos listas: unaque coincide con el predicado, y unaque no coincide con el predicado.
  • Scalatiene static typing,quepuedeser un aburrimiento.
  • Porsuerte, Scalatambiéntiene la inferencia de tiposparaciertascosas. Tipicamente, no esnecesarioespecificar el tipo de un variable. El tipo de retorno de métodostambiénpuedeserinferidopor el compilador.
  • Aquí, porejemplo, podemosdeclararque el tipo de “x” es un Int….Si queremos.
  • Pero no esnecesario, porqueScalatiene la inferencia de tipos.Aquí, porejemplo, el compiladorpuedeinferirque el tipo de “x” es un int.
  • Existealgunosmétodos en los que el compilador no puedeinferir el tipo de retorno.En los métodosrecursivos, porejemplo, el compilador no sabe lo quees el tipo de retorno.PAUSE
  • Porque el compilador no puedeinferir el tipo de retorno de método, necesitamosespecificareso.Existeotroscasos en lo quenecesitanespecificar el tipoqueesretorno, pero en general, van a tener un error descriptivosinecesitanespecificarle.
  • Si recuerden, Scala no es un lenguajequeespuramentefunciónal.
  • En realidad, el lenguajetienealgunaspropiedadesfuncionales, perotieneunaestructuraorientada al objetos.
  • Tuvimos unrecurso de lascosas en Scalaquéhacefunciónal al lenguaje.Entoncesyoquierohablar un poco de lo quéhaceorientado a objectos a Scala.
  • EnScala, un trait esunacoleccíon de fields y comportamientosquepuedenEXTEND o MIXIN a susclases.Los traits son muyfuertesporqueestán un métodoporcompartir el código-el comportamiento- común a través de susclases.
  • Aquí, tenemos un trait, “Pelicula,” quetiene solo un valor: un “String”
  • Cuandocreamos un clase, “Comedia,” podemosreutilizar la colección de comportamientosporunapelicula: el “trait” del Pelicula.
  • Podemos extend mas “traits” con la palabra, “with”En esteejemploutilizamos “pelicula” y “tiempo” en el clase, “comedia”
  • Finalmente, podemosorganizarsucódigo con los clases y traits en modules. Scalatienepatrónsparaorganizarcomoeso,peroesmuyfuerteparacrear el códigoqueesorganizado y reutilizable.
  • Transcript

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

    ×