28
Introducción a Scala

Introducción a scala

Embed Size (px)

DESCRIPTION

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.

Citation preview

Page 1: Introducción a scala

Introducción a Scala

Page 2: Introducción a scala

Agenda

¿Por dónde empezar?

Features de scala – OO & Funcional

OO Features – Scala Vs. Java

Funcional features de Scala

¿Qué es Scala?

Page 3: Introducción a scala

¿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

Page 4: Introducción a scala

¿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/

Page 5: Introducción a scala

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

Page 6: Introducción a scala

Clases

Vs.

Page 7: Introducción a scala

Case Classes

Vs.

Page 8: Introducción a scala

Traits

Vs.

Page 9: Introducción a scala

Herencia múltiple – Diamond problem

Vs.

Page 10: Introducción a scala

Traits – Ejemplos prácticos

Creando fake objects para test unitarios

Page 11: Introducción a scala

Traits – Ejemplos prácticosExtendiendo traits – ejemplo cache

Muy bonito pero... nuestro usuario quiere que la cache se refresque después de un tiempo determinado para reflejar los cambios

Page 12: Introducción a scala

Traits – Ejemplos prácticosExtendiendo traits – ejemplo cache

Page 13: Introducción a scala

Traits – Ejemplos prácticos

Apilando traits

Page 14: Introducción a scala

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

Page 15: Introducción a scala

Objects

Vs.

Page 16: Introducción a scala

Companion ObjectsDeclarar 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

Page 17: Introducción a scala

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

Page 18: Introducción a scala

Paradigma funcional

Page 19: Introducción a scala

Lenguajes funcionales

Origen en el cálculo lambda → Sistema formal para investigardefinició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 losprogramas y comprender su comportamiento

Page 20: Introducción a scala

Funciones puras

Funciones sin efecto de lado

Page 21: Introducción a scala

Inmutabilidad

Val vs Var

Page 22: Introducción a scala

Inmutabilidad

0 + 1

00

11 + 2

23 + 3

3

… 45 + 1010

Page 23: Introducción a scala

Pattern Matching

“Mighty” switch

Page 24: Introducción a scala

Higher-order functions

Funciones que:

* Toma una o mas funciones como parámetros

y/o

* Tiene una función como salida

Page 25: Introducción a scala

Higher-order functions

Ejemplo Set

Page 26: Introducción a scala

List API

filter, filterNot, find, flatMap, foldLeft, foldRight, forAll, foreach, groupBy...

Page 27: Introducción a scala

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

Page 28: Introducción a scala

Futuro de Scala?