Your SlideShare is downloading. ×
0
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Introducción a Scala
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Introducción a Scala

2,413

Published on

Diapositivas de la charla introducción a Scala del JavaDay 2012 del Colombia JUG

Diapositivas de la charla introducción a Scala del JavaDay 2012 del Colombia JUG

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
2,413
On Slideshare
0
From Embeds
0
Number of Embeds
9
Actions
Shares
0
Downloads
26
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Transcript

    • 1. Introducción a Scala Colombia JUG JavaDay 2012
    • 2. Contenido• Introducción• Estructuras de control• Programación orientada a objetos• Programación funcional
    • 3. Introducción
    • 4. Mario Arias@dh44thttp://cobaltolabs.comhttp://neuronica.wordpress.com
    • 5. ¿Que es Scala?Scala (Scalable Language).Scala es un lenguaje diseñado para la JVM,que combina los paradigmas de laprogramación orientada a objetos con laprogramación funcional
    • 6. ¿Quien lo diseño?Martin Odersky (@odersky) en la EPFL.TypeSafe es la empresa que desarrolla y dasoporte a Scala y otras tecnologíasrelacionadas
    • 7. Características• Orientado a objetos• Funcional• Escalable• Tipeado estático*• Extensible• Productivo• Open Sourcehttp://typesafe.com/technology/scala
    • 8. Hola Mundo!object HelloWorld { def main(args: Array[String]) { println("Hello World") }}
    • 9. Hola Mundo! (II)object HelloWorldApp extends App { println("Hello World")}
    • 10. Hola Mundo! (III)println("Hello World")
    • 11. REPL Read Evaluation Print LoopWelcome 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!
    • 12. Estructuras de control
    • 13. 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
    • 14. Variablesvar i:Int = 1var name:String = “Bonifacio”var age:Int = _
    • 15. Variables (II)//Inferencia de tiposvar i = 1var name = “Bonifacio”var age = _ //Error
    • 16. Variables (III)//JavaScriptvar i = 1;i = “Bonifacio”;//Scalavar i = 1i = “Bonifacio” //Error
    • 17. Valores//Scalaval i:Int = 1val name:String = “Bonifacio”//Javafinal int i = 1;final String name = “Bonifacio”;
    • 18. Valores (II)//inferencia de tiposval i = 1val name = “Bonifacio”
    • 19. Métodosdef duplicar(i:Int):Int = { return i*2}
    • 20. Métodos (II)def duplicar(i:Int) = { return i*2}
    • 21. Métodos (III)def duplicar(i:Int) = { i*2}
    • 22. Métodos (IV)def duplicar(i:Int) = i*2
    • 23. Métodos (V)def imprimir(i:Int):Unit = { println(i*2)}
    • 24. Métodos (V)def imprimir(i:Int){ println(i*2)}
    • 25. Invocaciónduplicar(1)duplicar{1}duplicar{ val i = 5 val j = i - 3 j * i}
    • 26. Invocación (II)multiplicar(2, 3)multiplicar{2, 3}// ErrortoString()toString
    • 27. ifif (1 > 2) { println("Uno es mayor a dos")} else { println("Dos es mayor a uno")}
    • 28. if (II)val resultado:String = if (1 > 2) { "Uno es mayor a dos"} else { "Dos es mayor a uno"}println(resultado)
    • 29. matchdef desc(i: Int): String = i match { case 1 => "Uno" case 2 => "Dos" case _ => "Otro"}
    • 30. match (II)def desc2(n: String): Int = n match { case "Uno" => 1 case "Dos" => 2 case _ => -1}
    • 31. match (III)def desc3(i: Int): String = i match { case 1 => "Uno" case 2 => "Dos" case z => z + " ?"}
    • 32. match (IV)def desc4(i: Int): String = i match { case 1 => "Uno" case 2 => "Dos" case z if z % 2 == 0 => "Par" case _ => "Impar"}
    • 33. match (V)def desc5(a: Any): String = a match { case i: Int => desc4(i) case i: String => i case i => i.toString}
    • 34. whilevar i = 0while (i < 5) { println("i = " + i) i += 1}
    • 35. do whilevar i = 0do { println("i = " + i) i += 1} while (i < 5)
    • 36. forfor (i <- 0 to 9) { println("i = " + i)}for (i <- 0 until 9) { println("i = " + i)}
    • 37. for (II)val langs = Array("Java", "Scala", "Python", "Groovy")for (lang <- langs) { println("lang = " + lang)}
    • 38. for (III)for (lang <- langs if lang.size > 4) { println("lang = " + lang)}
    • 39. for (IV)for { lang <- langs if lang.size > 4 upper = lang.toUpperCase} { println("lang = " + lang) println("upper = " + upper)}
    • 40. for yieldval upperLanguages = for (lang <- langs) yield lang.toUpperCase
    • 41. try catchtry{//operaciones peligrosas} catch{ case e:NumberFormatException => // case e:Exception => //}
    • 42. Programación orientada a objetos
    • 43. ¿Java es un lenguajeorientado a objetos puro?
    • 44. NO
    • 45. ¿Que es un lenguaje orientado a objetos puro?• Todo es un objeto• Todas las operaciones son métodos de dichos objetos
    • 46. ¿Por qué Java no lo es?• Primitivos• Miembros estáticos• Operaciones matemáticas• y otras operaciones
    • 47. Primitivos Java Scala byte Byte short Short int Int long Long char Char float Floatdouble Doubleboolean Boolean
    • 48. Miembros Estaticos//Javapublic class Helper{ public static void metodo(){}}//Scalaobject Helper{ def metodo(){}}
    • 49. Operaciones matemáticasval i = 2 + 3val j = 2.+(3)
    • 50. instanceof//Javaif(i instanceof String) {//}//Scalaif(i.isInstanceOf[String]){//}
    • 51. cast//Java(String)x((String)x).toUpperCase()//Scalax.asInstanceOf[String]x.asInstanceOf[String].toUpperCase
    • 52. clasesclass Perro{ var nombre:String = _ def hablar(){ println(nombre + “ dice: Gua”) }}
    • 53. modificadores de alcance Java Scala public “por defecto” protected protected private private“por defecto” private[paquete] N.D. private[this]
    • 54. constructorclass Perro(val nombre:String) { println("Acaba de nacer el perrito " + nombre)}
    • 55. constructor (II)class Perro(val nombre:String) { println("Acaba de nacer el perrito " + nombre) def this() = this(“Sin nombre”)}
    • 56. traittrait Cuadrupedo{ def caminar()}class Perro extends Cuadrupedo { def caminar(){ println(“Caminando...”) }}
    • 57. trait (II)trait Cuadrupedo{ def caminar(){ println(“Caminando...”) }}class Perro extends Cuadrupedo {}
    • 58. trait (III)class Perro extends Cuadrupedo with Mamifero {}class Gato extends Cuadrupedo with Mamifero {}class Tortuga extends Cuadrupedo with Reptil {}
    • 59. trait (IV)trait UserServiceAware{ @Inject var userService:UserService = _}class UserController extends UserServiceAware{}class UserEndPoint extends UserServiceAware{}
    • 60. trait (V)val robot = new Robot with Cuadrupedorobot.caminar()
    • 61. duck typingSi camina como pato y nada como pato es un pato
    • 62. duck typing (II)#Pythonclass Perro: def hablar(self): print "Gua"class Persona: def hablar(self): print "Hola"
    • 63. duck typing (III)#Pythondef hacer_hablar(hablador): hablador.hablar()hacer_hablar(Perro())hacer_hablar(Persona())hacer_hablar(1) #Error de ejecución
    • 64. Tipos estructuralesclass Perro{ def hablar(){println(“Guau”)}}class Persona{ def hablar(){println(“Hola”)}}
    • 65. Tipos estructurales(II) def hacerHablar(hablador:{def hablar()}){ hablador.hablar() } hacerHablar(new Perro) hacerHablar(new Persona) hacerhablar(1) //Error de compilación
    • 66. Tipos estructurales(III)def isHablarDefinido(x:Any):Boolean = { x.isInstanceOf[{def hablar()}]}
    • 67. applyval langs = Array("Java", "Scala", "Python", "Groovy")langs(0)langs.apply(0)
    • 68. Genéricostrait Listener[T]{ def action(event:T)}
    • 69. Genéricos (II)trait Listener[T <: MiClase]{ def action(event:T)}
    • 70. Funciones implícitas Funciones implícitas son funciones que usan paraconvertir de un tipo a otro en forma transparente
    • 71. Funciones implícitas (II)println("Desde el segundo JavaDay".andTheMusic())
    • 72. Funciones implícitas (III)class CarolinaCruzLike(val s: String) { def andTheMusic(): String = { s + " and the music" }}
    • 73. Funciones implícitas (IV)implicit def stringToCaroCruz(s: String) = { new CarolinaCruzLike(s)}
    • 74. Funciones implícitas (V)println("Desde el segundo JavaDay".andTheMusic())println{ stringToCaroCruz("Desde el segundo JavaDay") .andTheMusic()}
    • 75. Programación Funcional
    • 76. ¿Que es?Programación funcional es un paradigma deprogramación que trata todo operación como unaevaluación de una función aritmética y tiene sus raícesen el calculo lambda
    • 77. Funciónval duplicar = {i: Int => i * 2}val duplicar: (Int) => Int ={i => i * 2}duplicar(2)
    • 78. Composiciónval duplicar = {i: Int => i * 2}val mas5 = {i: Int => i + 5}val duplicarMas5 = duplicar andThen mas5duplicarMas5(2)val mas5duplicar = duplicar compose mas5mas5duplicar(2)
    • 79. Coleccionesval numeros = Array(1, 2, 3, 4, 5, 6, 7, 8, 9)numeros.foreach((i: Int) => { println("i = " + i)})numeros.foreach(i => println("i = " + i))
    • 80. Colecciones (II)//JavaList<String> langs = Arrays.asList("Java", "Scala", "Python", "Groovy");List<String> upperLangs = new ArrayList<String>();for (String lang : langs) { upperLangs.add(lang.toUpperCase());}
    • 81. Colecciones (III)val langs = List("Java", "Scala", "Python", "Groovy")val upperLangs = langs.map(lang => lang.toUpperCase)
    • 82. Colecciones (IV)Método Descripción Ejecuta una función en todos losforeach 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 losfilterNot elementos que no cumplen una función T => Boolean
    • 83. 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
    • 84. Función como parámetrodef operar(f: (Int, Int) => Int): Int = { f(5, 8)}operar((a, b) => {a + b})operar((a, b) => {a * b})
    • 85. Bloque como parámetrodef cronometrar(block: => Unit) { val start = System.currentTimeMillis() block println(System.currentTimeMillis() - start)}cronometrar{ unMetodoMuyDemorado()}
    • 86. ¿Como quedaron? or

    ×