SlideShare una empresa de Scribd logo
Introducción a Scala
   Colombia JUG JavaDay 2012
Contenido

• Introducción
• Estructuras de control
• Programación orientada a objetos
• Programación funcional
Introducción
Mario Arias
@dh44t
http://cobaltolabs.com
http://neuronica.wordpress.com
¿Que es Scala?

Scala (Scalable Language).
Scala es un lenguaje diseñado para la JVM,
que combina los paradigmas de la
programación orientada a objetos con la
programación funcional
¿Quien lo diseño?

Martin Odersky (@odersky) en la EPFL.
TypeSafe es la empresa que desarrolla y da
soporte a Scala y otras tecnologías
relacionadas
Características
•   Orientado a objetos
•   Funcional
•   Escalable
•   Tipeado estático*
•   Extensible
•   Productivo
•   Open Source
http://typesafe.com/technology/scala
Hola Mundo!

object HelloWorld {
    def main(args: Array[String]) {
        println("Hello World")
    }
}
Hola Mundo! (II)

object HelloWorldApp extends App {
    println("Hello World")
}
Hola Mundo! (III)

println("Hello World")
REPL
     Read Evaluation Print Loop

Welcome to Scala version 2.9.2 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_04).

Type in expressions to have them evaluated.

Type :help for more information.




scala>   println("Hello World!")

Hello World!
Estructuras de control
Sentencias y
         Expresiones

• Sentencias son bloques de código que se
  ejecutan
• Expresiones son bloques de código que se
  ejecutan y que retornan un valor
Variables

var i:Int = 1
var name:String = “Bonifacio”
var age:Int = _
Variables (II)

//Inferencia de tipos
var i = 1
var name = “Bonifacio”
var age = _ //Error
Variables (III)
//JavaScript
var i = 1;
i = “Bonifacio”;

//Scala
var i = 1
i = “Bonifacio” //Error
Valores
//Scala
val i:Int = 1
val name:String = “Bonifacio”


//Java
final int i = 1;
final String name = “Bonifacio”;
Valores (II)

//inferencia de tipos
val i = 1
val name = “Bonifacio”
Métodos


def duplicar(i:Int):Int = {
    return i*2
}
Métodos (II)


def duplicar(i:Int) = {
    return i*2
}
Métodos (III)


def duplicar(i:Int) = {
    i*2
}
Métodos (IV)


def duplicar(i:Int) = i*2
Métodos (V)


def imprimir(i:Int):Unit = {
    println(i*2)
}
Métodos (V)


def imprimir(i:Int){
    println(i*2)
}
Invocación
duplicar(1)
duplicar{1}
duplicar{
    val i = 5
    val j = i - 3
    j * i
}
Invocación (II)
multiplicar(2, 3)
multiplicar{2, 3}// Error
toString()
toString
if

if (1 > 2) {
    println("Uno es mayor a dos")
} else {
    println("Dos es mayor a uno")
}
if (II)
val resultado:String = if (1 > 2) {
    "Uno es mayor a dos"
} else {
    "Dos es mayor a uno"
}
println(resultado)
match

def desc(i: Int): String = i match {
    case 1 => "Uno"
    case 2 => "Dos"
    case _ => "Otro"
}
match (II)

def desc2(n: String): Int = n match {
    case "Uno" => 1
    case "Dos" => 2
    case _ => -1
}
match (III)

def desc3(i: Int): String = i match {
    case 1 => "Uno"
    case 2 => "Dos"
    case z => z + " ?"
}
match (IV)
def desc4(i: Int): String = i match {
    case 1 => "Uno"
    case 2 => "Dos"
    case z if z % 2 == 0 => "Par"
    case _ => "Impar"
}
match (V)

def desc5(a: Any): String = a match {
    case i: Int => desc4(i)
    case i: String => i
    case i => i.toString
}
while

var i = 0
while (i < 5) {
    println("i = " + i)
    i += 1
}
do while

var i = 0
do {
  println("i = " + i)
   i += 1
} while (i < 5)
for
for (i <- 0 to 9) {
    println("i = " + i)
}


for (i <- 0 until 9) {
    println("i = " + i)
}
for (II)

val langs = Array("Java", "Scala", "Python", "Groovy")

for (lang <- langs) {

    println("lang = " + lang)

}
for (III)

for (lang <- langs if lang.size > 4) {
    println("lang = " + lang)
}
for (IV)
for {
    lang <- langs
      if lang.size > 4
      upper = lang.toUpperCase
} {
      println("lang = " + lang)
      println("upper = " + upper)
}
for yield

val upperLanguages =
  for (lang <- langs)
  yield lang.toUpperCase
try catch

try{
//operaciones peligrosas
} catch{
    case e:NumberFormatException => //
    case e:Exception => //
}
Programación orientada
      a objetos
¿Java es un lenguaje
orientado a objetos
       puro?
Introducción a Scala
NO
¿Que es un lenguaje
  orientado a objetos
         puro?

• Todo es un objeto
• Todas las operaciones son métodos de
  dichos objetos
¿Por qué Java no lo es?

• Primitivos
• Miembros estáticos
• Operaciones matemáticas
• y otras operaciones
Primitivos
 Java      Scala
  byte     Byte
 short     Short
   int      Int
  long     Long
  char     Char
 float      Float
double    Double
boolean   Boolean
Miembros Estaticos
//Java

public class Helper{

    public static void metodo(){}

}




//Scala

object Helper{

    def metodo(){}

}
Operaciones
       matemáticas


val i = 2 + 3
val j = 2.+(3)
instanceof
//Java
if(i instanceof String) {//}




//Scala
if(i.isInstanceOf[String]){//}
cast
//Java
(String)x
((String)x).toUpperCase()



//Scala
x.asInstanceOf[String]
x.asInstanceOf[String].toUpperCase
clases

class Perro{
    var nombre:String = _
    def hablar(){
        println(nombre + “ dice: Gua”)
    }
}
modificadores de
    alcance
    Java             Scala
   public        “por defecto”
 protected         protected
   private          private
“por defecto”   private[paquete]
    N.D.          private[this]
constructor


class Perro(val nombre:String) {

    println("Acaba de nacer el perrito " + nombre)

}
constructor (II)


class Perro(val nombre:String) {

    println("Acaba de nacer el perrito " + nombre)

    def this() = this(“Sin nombre”)

}
trait
trait Cuadrupedo{

    def caminar()

}

class Perro extends Cuadrupedo {

    def caminar(){

        println(“Caminando...”)

    }

}
trait (II)

trait Cuadrupedo{

    def caminar(){

        println(“Caminando...”)

    }

}

class Perro extends Cuadrupedo {

}
trait (III)

class Perro extends Cuadrupedo with Mamifero {

}

class Gato extends Cuadrupedo with Mamifero {

}

class Tortuga extends Cuadrupedo with Reptil {

}
trait (IV)

trait UserServiceAware{

    @Inject var userService:UserService = _

}



class UserController extends UserServiceAware{}

class UserEndPoint extends UserServiceAware{}
trait (V)

val robot = new Robot with Cuadrupedo
robot.caminar()
duck typing


Si camina como pato y nada como pato es un pato
duck typing (II)
#Python

class Perro:

    def hablar(self):

          print "Gua"



class Persona:

    def hablar(self):

          print "Hola"
duck typing (III)
#Python
def hacer_hablar(hablador):
    hablador.hablar()


hacer_hablar(Perro())
hacer_hablar(Persona())
hacer_hablar(1) #Error de ejecución
Tipos estructurales
class Perro{
    def hablar(){println(“Guau”)}
}


class Persona{
    def hablar(){println(“Hola”)}
}
Tipos estructurales(II)

 def hacerHablar(hablador:{def hablar()}){

     hablador.hablar()

 }

 hacerHablar(new Perro)

 hacerHablar(new Persona)

 hacerhablar(1) //Error de compilación
Tipos estructurales(III)


def isHablarDefinido(x:Any):Boolean = {

    x.isInstanceOf[{def hablar()}]

}
apply
val langs = Array("Java", "Scala", "Python", "Groovy")

langs(0)

langs.apply(0)
Genéricos

trait Listener[T]{
    def action(event:T)
}
Genéricos (II)

trait Listener[T <: MiClase]{
    def action(event:T)
}
Funciones implícitas

 Funciones implícitas son funciones que usan para
convertir de un tipo a otro en forma transparente
Funciones implícitas (II)


println("Desde el segundo JavaDay".andTheMusic())
Funciones implícitas (III)

class CarolinaCruzLike(val s: String) {
    def andTheMusic(): String = {
        s + " and the music"
    }
}
Funciones implícitas (IV)


implicit def stringToCaroCruz(s: String) = {

    new CarolinaCruzLike(s)

}
Funciones implícitas (V)

println("Desde el segundo JavaDay".andTheMusic())



println{

    stringToCaroCruz("Desde el segundo JavaDay")

    .andTheMusic()

}
Programación Funcional
¿Que es?
Programación funcional es un paradigma de
programación que trata todo operación como una
evaluación de una función aritmética y tiene sus raíces
en el calculo lambda
Función
val duplicar = {i: Int => i * 2}


val duplicar: (Int) => Int =
{i => i * 2}


duplicar(2)
Composición
val duplicar = {i: Int => i * 2}
val mas5 = {i: Int => i + 5}
val duplicarMas5 = duplicar andThen mas5
duplicarMas5(2)
val mas5duplicar = duplicar compose mas5
mas5duplicar(2)
Colecciones

val numeros = Array(1, 2, 3, 4, 5, 6, 7, 8, 9)

numeros.foreach((i: Int) => {

 println("i = " + i)

})

numeros.foreach(i => println("i = " + i))
Colecciones (II)

//Java

List<String> langs = Arrays.asList("Java", "Scala", "Python", "Groovy");

List<String> upperLangs = new ArrayList<String>();

for (String lang : langs) {

    upperLangs.add(lang.toUpperCase());

}
Colecciones (III)


val langs = List("Java", "Scala", "Python", "Groovy")

val upperLangs = langs.map(lang => lang.toUpperCase)
Colecciones (IV)
Método               Descripción

            Ejecuta una función en todos los
foreach
                       elementos
              Colección nueva aplicando una
  map
               función a todos los elementos
              Colección nueva con todos los
 filter     elementos que cumplen una función
                       T => Boolean
              Colección nueva con todos los
filterNot      elementos que no cumplen una
                   función T => Boolean
Colecciones (V)
Método              Descripción


            Valida que todos los elementos
 forall
          cumplen una función T => Boolean

           Valida que al menos un elemento
 exists
           cumpla una función T => Boolean

          Retorna cuantos elementos cumplen
 count
               una función T => Boolean
Función como
                parámetro
def operar(f: (Int, Int) => Int): Int = {
    f(5, 8)
}


operar((a, b) => {a + b})
operar((a, b) => {a * b})
Bloque como
                 parámetro
def cronometrar(block: => Unit) {

    val start = System.currentTimeMillis()

    block

    println(System.currentTimeMillis() - start)

}



cronometrar{

    unMetodoMuyDemorado()

}
¿Como quedaron?


       or

Más contenido relacionado

PPT
TUTORIAL JAVA
PPTX
4 Introducción al lenguaje Scala
PPTX
Introducción a Scala
DOC
Java clases dictadas
PDF
Introducción a scala
PDF
Introducción a Swift
PPT
Mule Librerias en Java
TUTORIAL JAVA
4 Introducción al lenguaje Scala
Introducción a Scala
Java clases dictadas
Introducción a scala
Introducción a Swift
Mule Librerias en Java

La actualidad más candente (20)

PPTX
2 Introducción al lenguaje Ruby
PDF
Programar java
PDF
Progav tema2
PPT
Programar java
PDF
Curso de Python
PPTX
1 Introducción a los Lenguajes de Programación y a la Programación Orientada ...
PDF
Java 8 introducción a expresiones lambdas y api stream
PDF
Introduccion lenguaje java
PDF
PDF
.NET UY Meetup 6 - Integrando con C/C++ por medio de P/Invoke by Juan Ramirez
PDF
Ruby para Java Developers
PPTX
PDF
Java fundamentos -15 consejos prácticos - Encuentro Universitario Comunidad J...
ODP
02 python Programación orientada a objetos y funcional
PPT
PDF
Semana 1 Estructuras de Datos en Java
PDF
Java fundamentos -15 consejos practicos open saturday 2018
PDF
Semana 1 Estructuras de Control en Java
KEY
Ruby intro
PDF
Java Basico Platzi
2 Introducción al lenguaje Ruby
Programar java
Progav tema2
Programar java
Curso de Python
1 Introducción a los Lenguajes de Programación y a la Programación Orientada ...
Java 8 introducción a expresiones lambdas y api stream
Introduccion lenguaje java
.NET UY Meetup 6 - Integrando con C/C++ por medio de P/Invoke by Juan Ramirez
Ruby para Java Developers
Java fundamentos -15 consejos prácticos - Encuentro Universitario Comunidad J...
02 python Programación orientada a objetos y funcional
Semana 1 Estructuras de Datos en Java
Java fundamentos -15 consejos practicos open saturday 2018
Semana 1 Estructuras de Control en Java
Ruby intro
Java Basico Platzi
Publicidad

Destacado (13)

PDF
JOGUITOPAR / TROPICAL FLOWER PRODUCTION
PPTX
Successful direct market flower production for great plains vegetable growers...
PPTX
Market bouquets from spring to fall mark cain ssawg 2016
PDF
Shahzad Flower Farms
PPTX
india' s foriculture
PPTX
Tribes of Maharashtra
PPTX
Significance of Soil Survey and Land Use Planning for Sustainable Agriculture...
PPT
Indian agriculture
PPTX
Floriculture
PPTX
Floriculture industry
PPTX
Maharashtra
PDF
Specialty Cut Flower Production and Marketing
PPT
agriculture ppt
JOGUITOPAR / TROPICAL FLOWER PRODUCTION
Successful direct market flower production for great plains vegetable growers...
Market bouquets from spring to fall mark cain ssawg 2016
Shahzad Flower Farms
india' s foriculture
Tribes of Maharashtra
Significance of Soil Survey and Land Use Planning for Sustainable Agriculture...
Indian agriculture
Floriculture
Floriculture industry
Maharashtra
Specialty Cut Flower Production and Marketing
agriculture ppt
Publicidad

Similar a Introducción a Scala (20)

PDF
Apache spark meetup
PDF
Procesamiento de datos a gran escala con Apache Spark
PDF
1.2. kotlin (1)
PDF
1.2. kotlin
PPTX
Fundamentos de Scala (Scala Basics) (español) Catecbol
PDF
Descubriendo scala
PDF
Curso de Scala: Trabajando con variables
PDF
Programación Políglota en la JVM
PDF
Scala: un vistazo general
PDF
Scala en proyectos de vinculación Ancap-UR - 2013-03
PPTX
Codemotion 2014 Scala @real life
PPTX
Scala @ Real Life Codemotion 2014
PPTX
kotlin_25 programacion en Android p.pptx
PDF
Clase6 collections
PPT
LibreríAs De Java
PPTX
Pf con scala
PDF
Kotlin es
PDF
SCJP, Clase 6: Collections
Apache spark meetup
Procesamiento de datos a gran escala con Apache Spark
1.2. kotlin (1)
1.2. kotlin
Fundamentos de Scala (Scala Basics) (español) Catecbol
Descubriendo scala
Curso de Scala: Trabajando con variables
Programación Políglota en la JVM
Scala: un vistazo general
Scala en proyectos de vinculación Ancap-UR - 2013-03
Codemotion 2014 Scala @real life
Scala @ Real Life Codemotion 2014
kotlin_25 programacion en Android p.pptx
Clase6 collections
LibreríAs De Java
Pf con scala
Kotlin es
SCJP, Clase 6: Collections

Introducción a Scala

Notas del editor