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

Introducción a Scala

Introducción a Scala

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.

Paradigma

March 21, 2014
Tweet

More Decks by Paradigma

Other Decks in Technology

Transcript

  1. Introducción a Scala

    View Slide

  2. Agenda
    ¿Por dónde empezar?
    Features de scala – OO & Funcional
    OO Features – Scala Vs. Java
    Funcional features de Scala
    ¿Qué es Scala?

    View Slide

  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

    View Slide

  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/

    View Slide

  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

    View Slide

  6. Clases
    Vs.

    View Slide

  7. Case Classes
    Vs.

    View Slide

  8. Traits
    Vs.

    View Slide

  9. Herencia múltiple – Diamond problem
    Vs.

    View Slide

  10. Traits – Ejemplos prácticos
    Creando fake objects para test unitarios

    View Slide

  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

    View Slide

  12. Traits – Ejemplos prácticos
    Extendiendo traits – ejemplo cache

    View Slide

  13. Traits – Ejemplos prácticos
    Apilando traits

    View Slide

  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!!!

    View Slide

  15. Objects
    Vs.

    View Slide

  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

    View Slide

  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

    View Slide

  18. Paradigma funcional

    View Slide

  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

    View Slide

  20. Funciones puras
    Funciones sin efecto de lado

    View Slide

  21. Inmutabilidad
    Val vs Var

    View Slide

  22. Inmutabilidad
    0 + 1
    0
    0
    1
    1 + 2
    2
    3 + 3
    3
    … 45 + 10
    10

    View Slide

  23. Pattern Matching
    “Mighty” switch

    View Slide

  24. Higher-order functions
    Funciones que:
    * Toma una o mas funciones como parámetros
    y/o
    * Tiene una función como salida

    View Slide

  25. Higher-order functions
    Ejemplo Set

    View Slide

  26. List API
    filter, filterNot, find, flatMap, foldLeft, foldRight, forAll, foreach, groupBy...

    View Slide

  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

    View Slide

  28. Futuro de Scala?

    View Slide