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

Más contenido relacionado

La actualidad más candente (18)

Funcionamiento de un pila
Funcionamiento de un pilaFuncionamiento de un pila
Funcionamiento de un pila
 
Constructores
ConstructoresConstructores
Constructores
 
Agregación Composición
Agregación ComposiciónAgregación Composición
Agregación Composición
 
Listas enlazadas
Listas enlazadasListas enlazadas
Listas enlazadas
 
Notación infija postfija
Notación infija postfijaNotación infija postfija
Notación infija postfija
 
Estructura de Datos (LISTAS, COLAS, PILAS)
Estructura de Datos (LISTAS, COLAS, PILAS)Estructura de Datos (LISTAS, COLAS, PILAS)
Estructura de Datos (LISTAS, COLAS, PILAS)
 
Iteradores, Listas y Conjuntos en Java
Iteradores, Listas y Conjuntos en JavaIteradores, Listas y Conjuntos en Java
Iteradores, Listas y Conjuntos en Java
 
Arreglos, Procedimientos y Funciones
Arreglos, Procedimientos y FuncionesArreglos, Procedimientos y Funciones
Arreglos, Procedimientos y Funciones
 
Ada 4 funciones de la hoja de cálculo
Ada 4   funciones de la hoja de cálculoAda 4   funciones de la hoja de cálculo
Ada 4 funciones de la hoja de cálculo
 
Estructura datos pilas y colas
Estructura datos pilas y colasEstructura datos pilas y colas
Estructura datos pilas y colas
 
Ejemplo herencia21 10
Ejemplo herencia21 10Ejemplo herencia21 10
Ejemplo herencia21 10
 
Pilas Colas
Pilas ColasPilas Colas
Pilas Colas
 
20152 sfiec030121 1
20152 sfiec030121 120152 sfiec030121 1
20152 sfiec030121 1
 
10. aplicaciones de las pilas
10. aplicaciones de las pilas10. aplicaciones de las pilas
10. aplicaciones de las pilas
 
Listas, pilas y colas
Listas, pilas y colasListas, pilas y colas
Listas, pilas y colas
 
ADAS 4 - Funciones de la hoja de cálculo
ADAS 4  -  Funciones de la hoja de cálculoADAS 4  -  Funciones de la hoja de cálculo
ADAS 4 - Funciones de la hoja de cálculo
 
Pilas y colas
Pilas y colasPilas y colas
Pilas y colas
 
Transparencias3
Transparencias3Transparencias3
Transparencias3
 

Destacado (13)

Scala en la Practica
Scala en la PracticaScala en la Practica
Scala en la Practica
 
Programación Funcional en Scala
Programación Funcional en ScalaProgramación Funcional en Scala
Programación Funcional en Scala
 
Introducción a Scala
Introducción a ScalaIntroducción a Scala
Introducción a Scala
 
Curso de Scala: Trabajando con variables
Curso de Scala: Trabajando con variablesCurso de Scala: Trabajando con variables
Curso de Scala: Trabajando con variables
 
Scala - just good for Java shops?
Scala - just good for Java shops?Scala - just good for Java shops?
Scala - just good for Java shops?
 
JavaFX and Scala - Like Milk and Cookies
JavaFX and Scala - Like Milk and CookiesJavaFX and Scala - Like Milk and Cookies
JavaFX and Scala - Like Milk and Cookies
 
Introducción a scala
Introducción a scalaIntroducción a scala
Introducción a scala
 
Baño
BañoBaño
Baño
 
Koreference
KoreferenceKoreference
Koreference
 
Scala+swing
Scala+swingScala+swing
Scala+swing
 
JavaFX 2 and Scala - Like Milk and Cookies (33rd Degrees)
JavaFX 2 and Scala - Like Milk and Cookies (33rd Degrees)JavaFX 2 and Scala - Like Milk and Cookies (33rd Degrees)
JavaFX 2 and Scala - Like Milk and Cookies (33rd Degrees)
 
4 Introducción al lenguaje Scala
4 Introducción al lenguaje Scala4 Introducción al lenguaje Scala
4 Introducción al lenguaje Scala
 
Scala
ScalaScala
Scala
 

Similar a Scala: orientado a objetos, funcional y objeto-funcional

Descubriendo scala
Descubriendo scalaDescubriendo scala
Descubriendo scalanluaces
 
Introducción a Scala
Introducción a ScalaIntroducción a Scala
Introducción a Scaladhaat
 
Javascript funcional
Javascript funcionalJavascript funcional
Javascript funcionalLeonardo Soto
 
Procesamiento de datos a gran escala con Apache Spark
Procesamiento de datos a gran escala con Apache SparkProcesamiento de datos a gran escala con Apache Spark
Procesamiento de datos a gran escala con Apache SparkSoftware Guru
 
Funciones de Strings en PHP
Funciones de Strings en PHPFunciones de Strings en PHP
Funciones de Strings en PHPAngie Mejia
 
Fundamentos de Scala (Scala Basics) (español) Catecbol
Fundamentos de Scala (Scala Basics) (español) CatecbolFundamentos de Scala (Scala Basics) (español) Catecbol
Fundamentos de Scala (Scala Basics) (español) CatecbolJean-Paul Calbimonte
 
Perl (practical extraction and report language)
Perl (practical extraction and report language)Perl (practical extraction and report language)
Perl (practical extraction and report language)Oliver Centeno
 
Kit de supervivencia para Java 8 : como prepararse para Java 9
Kit de supervivencia para Java 8 :  como prepararse para Java 9Kit de supervivencia para Java 8 :  como prepararse para Java 9
Kit de supervivencia para Java 8 : como prepararse para Java 9Eudris Cabrera
 
Programacion en python_1
Programacion en python_1Programacion en python_1
Programacion en python_1wozgeass
 
Funciones excel
Funciones excelFunciones excel
Funciones excelMPEC10
 
Funciones Excel
Funciones ExcelFunciones Excel
Funciones Excelreivaxusj
 
U5. Arreglos de Objetos.pdf
U5. Arreglos de Objetos.pdfU5. Arreglos de Objetos.pdf
U5. Arreglos de Objetos.pdfTareasEMI
 
Tema 7: Funciones de orden superior en Haskell
Tema 7: Funciones de orden superior en HaskellTema 7: Funciones de orden superior en Haskell
Tema 7: Funciones de orden superior en HaskellJosé A. Alonso
 

Similar a Scala: orientado a objetos, funcional y objeto-funcional (20)

Descubriendo scala
Descubriendo scalaDescubriendo scala
Descubriendo scala
 
Clase 7 objetos globales de javaScript
Clase 7 objetos globales de javaScriptClase 7 objetos globales de javaScript
Clase 7 objetos globales de javaScript
 
Introducción a Scala
Introducción a ScalaIntroducción a Scala
Introducción a Scala
 
Javascript funcional
Javascript funcionalJavascript funcional
Javascript funcional
 
Apache spark meetup
Apache spark meetupApache spark meetup
Apache spark meetup
 
Procesamiento de datos a gran escala con Apache Spark
Procesamiento de datos a gran escala con Apache SparkProcesamiento de datos a gran escala con Apache Spark
Procesamiento de datos a gran escala con Apache Spark
 
2 Introducción al lenguaje Ruby
2 Introducción al lenguaje Ruby2 Introducción al lenguaje Ruby
2 Introducción al lenguaje Ruby
 
Funciones de Strings en PHP
Funciones de Strings en PHPFunciones de Strings en PHP
Funciones de Strings en PHP
 
Java 8
Java 8Java 8
Java 8
 
Fundamentos de Scala (Scala Basics) (español) Catecbol
Fundamentos de Scala (Scala Basics) (español) CatecbolFundamentos de Scala (Scala Basics) (español) Catecbol
Fundamentos de Scala (Scala Basics) (español) Catecbol
 
Perl (practical extraction and report language)
Perl (practical extraction and report language)Perl (practical extraction and report language)
Perl (practical extraction and report language)
 
Kit de supervivencia para Java 8 : como prepararse para Java 9
Kit de supervivencia para Java 8 :  como prepararse para Java 9Kit de supervivencia para Java 8 :  como prepararse para Java 9
Kit de supervivencia para Java 8 : como prepararse para Java 9
 
Programacion en python_1
Programacion en python_1Programacion en python_1
Programacion en python_1
 
Clase 5 funciones en javaScript
Clase 5 funciones en javaScriptClase 5 funciones en javaScript
Clase 5 funciones en javaScript
 
Módulo 4 (sin estilo)
Módulo 4 (sin estilo)Módulo 4 (sin estilo)
Módulo 4 (sin estilo)
 
Funciones excel
Funciones excelFunciones excel
Funciones excel
 
Funciones Excel
Funciones ExcelFunciones Excel
Funciones Excel
 
Vba y objetos excel
Vba y objetos excelVba y objetos excel
Vba y objetos excel
 
U5. Arreglos de Objetos.pdf
U5. Arreglos de Objetos.pdfU5. Arreglos de Objetos.pdf
U5. Arreglos de Objetos.pdf
 
Tema 7: Funciones de orden superior en Haskell
Tema 7: Funciones de orden superior en HaskellTema 7: Funciones de orden superior en Haskell
Tema 7: Funciones de orden superior en Haskell
 

Scala: orientado a objetos, funcional y objeto-funcional

Notas del editor

  1. Hola! Me llamo Rebecca y soy desarolladora en ThoughtWorks. Estanocheyoquierohablar de la programaciónfuncional con Scala.
  2. Peroprimeramente… queesScala?Scalautiliza el Maquina Virtual de Java. Puedencorrerlo en el JVM y utilizalasbibliotecas de Java en el código de Scala.
  3. Scalatiene un tipadoestático. Vamos a hablar de eso unpoco mas tarde.
  4. Scalaesorientado a objetos. Pero…..
  5. 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.
  6. Entonces,si. Scalaesorientado a objetos
  7. PeroScalaestambíenfuncional.
  8. Porestarazón, escomúnllamarestelenguajeobjeto-funcional.Estosignificaque el lenguajetienepropiedadesque lo hacenfuncional, peropuedencrearobjetosparaorganizarsucódigo.
  9. Entonces, me gustariacentrarme enalgunascaracterísticasquehacenfuncional a un lenguaje.Y, particularmente, quehacefuncional a Scala.
  10. Scalatienefunciones de orden superior.Estosignifica dos cosas:Los funciones de orden superior son funcionesquetienen OTRA funcióncomoparametro
  11. Y, pues,lasfunciones de orden superior son funcionesqueretornanunafunción.
  12. 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.
  13. El método “main” dice que “apply” va a llamar a “entrada” con 50 como el segundoparametro.El resultadoestáabajo.
  14. 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.
  15. 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.
  16. 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.
  17. Cuandoqueremosañadir 5 y 6, porejemplo, podemospasar los argumentoscomoeso.Chevere, sí? Ahoraqueremoscrearotrafunción, “añadirdiez.”Y queremosutilizar la función add.
  18. Aquíutilizamos la función add y un guiónbajoparaaplicarparcialmente el segundoargumento.
  19. addTen solo tiene un argumento. NotanqueaddTenretorno un funciónqueva a tomar el segundoargumentocomo un argumento.
  20. Scalatambiéntienemuchasfunciónesquienecambiotodos los miembros de unacolección. Estes son llamas combinadoresfuncionales.Map, porejemplo, ejecutaunafunción en unalista.
  21. “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.
  22. Scalatiene static typing,quepuedeser un aburrimiento.
  23. 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.
  24. Aquí, porejemplo, podemosdeclararque el tipo de “x” es un Int….Si queremos.
  25. Pero no esnecesario, porqueScalatiene la inferencia de tipos.Aquí, porejemplo, el compiladorpuedeinferirque el tipo de “x” es un int.
  26. 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
  27. 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.
  28. Si recuerden, Scala no es un lenguajequeespuramentefunciónal.
  29. En realidad, el lenguajetienealgunaspropiedadesfuncionales, perotieneunaestructuraorientada al objetos.
  30. Tuvimos unrecurso de lascosas en Scalaquéhacefunciónal al lenguaje.Entoncesyoquierohablar un poco de lo quéhaceorientado a objectos a Scala.
  31. 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.
  32. Aquí, tenemos un trait, “Pelicula,” quetiene solo un valor: un “String”
  33. Cuandocreamos un clase, “Comedia,” podemosreutilizar la colección de comportamientosporunapelicula: el “trait” del Pelicula.
  34. Podemos extend mas “traits” con la palabra, “with”En esteejemploutilizamos “pelicula” y “tiempo” en el clase, “comedia”
  35. Finalmente, podemosorganizarsucódigo con los clases y traits en modules. Scalatienepatrónsparaorganizarcomoeso,peroesmuyfuerteparacrear el códigoqueesorganizado y reutilizable.