Introducción a scala

963 views

Published on

Scala es un lenguaje que combina la programación orientada a objetos y el paradigma imperativo, con el paradigma funcional. En esta charla nos centraremos primero en ver las características OO de Scala comparándolas con Java y luego veremos algunas de las características "funcionales" del lenguaje.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
963
On SlideShare
0
From Embeds
0
Number of Embeds
13
Actions
Shares
0
Downloads
7
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Introducción a scala

  1. 1. Introducción a Scala
  2. 2. Agenda ¿Por dónde empezar? Features de scala – OO & Funcional OO Features – Scala Vs. Java Funcional features de Scala ¿Qué es Scala?
  3. 3. ¿Qué es Scala? Lenguaje de propósito general Martin Odersky → Escuela Politécnica de Lausanne → 2001 Unifica características de paradigma OO y funcional Typesafe Inc. → 2011 1ª versión → finales 2003 2ª versión → Marzo 2006
  4. 4. ¿Por dónde empezar? Read-eval-print loop (REPL): Simple Build Tool (sbt) http://www.scala-sbt.org/ giter8 (g8) https://github.com/n8han/giter8 Integración con IDEs: - Intellij: https://github.com/mpeltonen/sbt-idea - Eclipse: https://github.com/typesafehub/sbteclipse Scala school: http://twitter.github.io/scala_school/
  5. 5. Features de Scala OO FUNCIONAL → Clases → Case Classes → Traits → Herencia múltiple → Objects → Companion Objects → Implícitos → Funciones puras → Inmutabilidad → Pattern Matching → Funciones de orden superior → List API → Laziness → For-comprehension
  6. 6. Clases Vs.
  7. 7. Case Classes Vs.
  8. 8. Traits Vs.
  9. 9. Herencia múltiple – Diamond problem Vs.
  10. 10. Traits – Ejemplos prácticos Creando fake objects para test unitarios
  11. 11. Traits – Ejemplos prácticos Extendiendo traits – ejemplo cache Muy bonito pero... nuestro usuario quiere que la cache se refresque después de un tiempo determinado para reflejar los cambios
  12. 12. Traits – Ejemplos prácticos Extendiendo traits – ejemplo cache
  13. 13. Traits – Ejemplos prácticos Apilando traits
  14. 14. To trait or not to trait Una clase puede extender sólo de una superclase pero puede “mix-in” todos los traits que quiera => mixin-class composition Traits no admiten parámetros en su constructor (sólo type parameters) Si queremos “fully-interoperability” con Java => abstract class Si va a ser reutilizada en múltiples y no-relacionadas clases => trait Si aún asi dudas.... Usa traits!!!
  15. 15. Objects Vs.
  16. 16. Companion Objects Declarar métodos y variables estáticas de nuestras clases Declarar el método unapply que se invocara al hacer pattern matching sobre la clase Declarar el método apply que se usa típicamente como un Factory method
  17. 17. Implícitos defs class scala> id(“3”) → returns “3” scala> id(3) → id(fromIntToString(3)) → returns “3” scala> 4.duplicateInt → new IntHelper(4).duplicateInt → returns 8
  18. 18. Paradigma funcional
  19. 19. Lenguajes funcionales Origen en el cálculo lambda → Sistema formal para investigar definición de funciones, aplicación de funciones y recursión Funciones que producen resultados que dependen sólo de sus “inputs” no del estado del programa Eliminar efectos de lado → hacen más fácil de entender los programas y comprender su comportamiento
  20. 20. Funciones puras Funciones sin efecto de lado
  21. 21. Inmutabilidad Val vs Var
  22. 22. Inmutabilidad 0 + 1 00 1 1 + 2 2 3 + 3 3 … 45 + 10 10
  23. 23. Pattern Matching “Mighty” switch
  24. 24. Higher-order functions Funciones que: * Toma una o mas funciones como parámetros y/o * Tiene una función como salida
  25. 25. Higher-order functions Ejemplo Set
  26. 26. List API filter, filterNot, find, flatMap, foldLeft, foldRight, forAll, foreach, groupBy...
  27. 27. Conclusiones Funcional + OO > Solo OO Lenguaje expresivo y flexible (arma doble-filo) JVM Mejora las habilidades del programador Migración progresiva desde Java Comunidad y ecosistema cada vez más potente
  28. 28. Futuro de Scala?

×