Download - Scala Ucuenca 2
![Page 1: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/1.jpg)
SCALA
![Page 2: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/2.jpg)
Introducción
Scala es el acrónimo de “Scalable Language” Es un lenguaje de programación funcional
híbrido Creado por Martin Odersky Primera versión liberada en 2003
![Page 3: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/3.jpg)
Introducción
Integra características de lenguajes orientados a objetos y funcionales
Scala es compilado para ser ejecutado dentro de una Máquina Virtual de Java JVM
Muchas compañías que dependen de Java para aplicaciones críticas están cambiando a Scala para impulsar su productividad de desarrollo, escalabilidad y confiabilidad
![Page 4: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/4.jpg)
Principales características
Scala es un lenguaje puro orientado a objetos (todo valor es un objeto).
Tipos y comportamientos de los objetos son descritos por clases y rasgos (traits).
Scala es funcional, toda función es un valor, todo valor es un objeto, toda función es un objeto.
Provee sintaxis liviana para definir funciones anónimas.
Soporta funciones de orden alto, funciones anidadas y “currying”.
Scala utiliza tipado estático.
![Page 5: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/5.jpg)
Principales características
Corre dentro de una JVM (ByteCode). Comparte el mismo runtime del lenguaje Java.
Scala puede ejectuar código Java.
![Page 6: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/6.jpg)
Diferencias frente a Java
Todos los tipos son objetos. Inferencia de tipos. Funciones anidadas. Funciones son objetos. Domain specific language (DSL) Traits Closures Soporte de concurrencia inspirado en
ERLANG
![Page 7: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/7.jpg)
Sintáxis Básica El caractér de fin de sentencia ; es opcional. Sensibilidad a mayúsculas. Identificadores Hello y
hello son diferentes. Nombres de clases: la primera letra debe ser
mayúscula (MiPrimeraClase). Nombres de métodos: la primera letra debe ser
minúscula (miNombreMetodo) Nombre de programa: Nombre del archivo del
programa debe coincidir con el nombre del objeto (HelloWorld.scala)
def main(args: Array[String]) – Un programa scala debe iniciar desde el método main() el cual es una parte mandatoria para cualquier programa scala.
![Page 8: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/8.jpg)
Sintáxis Básica - Identificadores
Todos los componentes de scala tienen nombre (Objetos, Clases, Variables y métodos)
Existen 4 tipos de identificadores en scala: Alfanuméricos: Operadores Mixtos Literales
![Page 9: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/9.jpg)
Identificadores alfanuméricos
Empiezan con una letra o un underscore, seguido de letras digitos o mas underscores. $ no es permitido Legales: age, salary, _value, __1_value Ilegales: $salary, 123abc, -salary
![Page 10: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/10.jpg)
Identificadores operador
Consiste de uno o mas caracteres operadores + ++ ::: <?> :>
![Page 11: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/11.jpg)
Identificadores mixtos
Consiste de un identificador alfanumérico seguido por un underscore y un operador identificador. unary_+, myvar_=
![Page 12: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/12.jpg)
Identificadores literales
Es una cadena de caracteres arbitraria encerrada entre comillas simples `x` `<clinit>` `yield`
![Page 13: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/13.jpg)
Palabras Clave
![Page 14: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/14.jpg)
Otros elementos de sintaxis
Soporte de comentarios multi línea similar a Java
Scala es un lenguage orientado a líneas. Las sentencias pueden terminar en (;) o nueva línea.
El (;) es opcional. Si dos sentencias están en una misma línea
estas deben ser separadas por (;)
![Page 15: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/15.jpg)
Paquetes
Definición de paquetes similar a java Para importar todo el contenido de un
paquete: import scala.xml._
Para importar una clase específica: import scala.collection.mutable.HashMap
Para importar mas de una clase del mismo paquete: import scala.collection.immutable.{TreeMap,
TreeSet}
![Page 16: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/16.jpg)
Tipos de datos
Tiene los mismos tipos de datos que Java con la salvedad que todos son objetos.
No existen tipos primitivos en el lenguaje
![Page 17: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/17.jpg)
Tipos de datos
![Page 18: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/18.jpg)
Literales basicos de scala
Integer Punto flotante Booleanos Simbolos Caracteres Strings Strings multilínea Valor nulo
![Page 19: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/19.jpg)
Literales Integer
Usualmente de tipo Int, o de tipo Long cuando es seguido por un sufijo L o l 0 035 21 0xFFFFFFFF
![Page 20: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/20.jpg)
Literales de punto flotante
Son de tipo Float cuando es seguido por un sufijo de tipo de punto flotante F o f y son de tipo Double en caso contrario. 0.0 1e30f 3.14159f 1.0e100 .1
![Page 21: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/21.jpg)
Literales de tipo booleano y caracter
true y false son miembros del tipo Boolean. Los literales de tipos caracter son caracteres
simples encerrados entre comillas simples. El caracter puede ser o un caracter unicode
imprimible o un caracter descrito por una secuencia de escapes 'a' '\u0041' '\n' '\t'
![Page 22: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/22.jpg)
Literales string
Es una secuencia de caracteres entre comillas dobles. El caracter puede ser o un caracter unicode imprimible o un caracter descrito por una secuencia de escapes. "Hello,\nWorld!" "This string contains a \" character."
![Page 23: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/23.jpg)
Literales string multiple línea Secuencia de caracteres encerrados entre triple
comillas dobles “”” ... “””. El valor nulo es de tipo scala.Null, representa
el objeto especial null.
![Page 24: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/24.jpg)
Variables
Posee diferentes sintaxis para la declaración de variables.
Pueden ser definidas como valor constante o variable. var myVar : String = "Foo" val myVal : String = "Foo"
![Page 25: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/25.jpg)
Tipos de datos de variables
El tipo de la variable es especificado después del nombre de la variable y antes del signo igual. val or val VariableName : DataType [=Initial Value] var myVar :Int; val myVal :String;
![Page 26: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/26.jpg)
Inferencia de tipos de variables
Cuando se asigna un valor inicial, el compilador de scala puede determinar el tipo de la variable basado en su valor asignado (Inferencia de tipos). var myVar = 10; val myVal = "Hello, Scala!";
![Page 27: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/27.jpg)
Asignaciones múltiples
Scala soporta asignación múltiple Si un bloque de código retorna una “Tupla”,
esta puede ser asignada a una variable “val” val (myVar1: Int, myVar2: String) = Pair(40, "Foo") val (myVar1, myVar2) = Pair(40, "Foo")
![Page 28: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/28.jpg)
Tipos de variables
En scala las variables pueden tener diferentes tipos de ámbitos dependiendo del lugar en donde son usados: Como campos Como parámetros de un método Como variables locales
![Page 29: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/29.jpg)
Variables tipo campo
Son variables que pertenecen a un objeto Son accesibles desde cada método de un
objeto. Son accesibles desde otros objetos
dependiendo de su modificador de acceso. Pueden ser mutables o inmutables (var o val)
![Page 30: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/30.jpg)
Variables como parámetro de un método
Son variables que se pasan a un método cuando este es llamado.
Los parámetros de un método son siempre mutables y definidos con la palabra clave “val”
![Page 31: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/31.jpg)
Variables locales
Son variables declaradas dentro de un método.
Las variables locales pueden ser mutables o inmutables (var o val)
![Page 32: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/32.jpg)
Modificadores de acceso
Miembros de paquetes, clases y objetos pueden ser etiquetados con los modificadores de acceso private y protected.
Si no se utiliza ninguno de los dos se asume un acceso público.
Los modificadores de acceso restringen el acceso a ciertas regiones del código.
![Page 33: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/33.jpg)
Miembros privadosUn miembro private es solo visible desde la propia
clase.
class Outer {
class Inner {
private def f() { println("f") }
class InnerMost {
f() // OK
}
}
(new Inner).f() // Error: f is not accessible
}
![Page 34: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/34.jpg)
Miembros protegidosLos miembros protegidos son accesibles desde las subclases de
una clase en la cual el miembro está definido
package p {
class Super {
protected def f() { println("f") }
}
class Sub extends Super {
f()
}
class Other {
(new Super).f() // Error: f is not accessible
}
}
![Page 35: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/35.jpg)
Miembros públicos
Aquellos miembros que no se encuentran etiquetados con public o private.
class Outer {
class Inner {
def f() { println("f") }
class InnerMost {
f() // OK
}
}
(new Inner).f() // OK because now f() is public
}
![Page 36: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/36.jpg)
Alcance de protección
Los modificadores pueden recibir argumentos como calificadores.
Los modificadores de la forma private[X] o protected[x] significa que su acceso es privado hasta X
X determina el paquete, clase u objeto.
![Page 37: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/37.jpg)
Alcance de protecciónpackage society {
package professional {
class Executive {
private[professional] var workDetails = null
private[society] var friends = null
private[this] var secrets = null
def help(another : Executive) {
println(another.workDetails)
println(another.secrets) //ERROR
}
}
}
}
![Page 38: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/38.jpg)
Scala - Operadores
Un simbolo operador indica al compilador ejectuar una operación matemática o lógica
Scala soporta los operadores:• Aritméticos
• Relacionales
• Lógicos
• A nivel de bit
• Asignación
![Page 39: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/39.jpg)
Operadores aritméticos
![Page 40: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/40.jpg)
Operadores relacionales
![Page 41: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/41.jpg)
Operadores lógicos
![Page 42: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/42.jpg)
Operadores a nivel de bit
![Page 43: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/43.jpg)
![Page 44: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/44.jpg)
Operadores de asignación
![Page 45: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/45.jpg)
Control de flujo
Sentencias condicionales Bucles
![Page 46: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/46.jpg)
Sentencias condicionales - IF
Consiste de una expresión booleana seguida de una o mas sentencias
Sintaxis:
If (Expresion_Booleana)
{//Sentencias se ejecutan si la expresion booleana es true
}
![Page 47: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/47.jpg)
Sentencias condicionales - IF
Ejemplo:object Test {
def main(args: Array[String]) {
var x = 10;
if( x < 20 ){
println("This is if statement");}
}
}
![Page 48: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/48.jpg)
Sentencias condicionales – IF...ELSE
Una sentencia if podría ser seguida de una sentencia opcional else, la cual se ejecuta cuando le expresión booleana se evalua a falso.
if(Boolean_expression){
//Executes when the Boolean expression is true
}else{
//Executes when the Boolean expression is false
}
![Page 49: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/49.jpg)
Sentencias condicionales – if ... else
object Test {
def main(args: Array[String]) {
var x = 30;
If( x < 20 ){
println("This is if statement");
}else{
println("This is else statement");
}
}
}
![Page 50: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/50.jpg)
Sentencias condicionales if ... else if ... else
Una sentencia if opcionalmente puede ser seguida por una sentencia else if.
Sintaxis if(Boolean_expression 1){
//Executes when the Boolean expression 1 is true
}else if(Boolean_expression 2){
//Executes when the Boolean expression 2 is true
}else if(Boolean_expression 3){
//Executes when the Boolean expression 3 is true
}else {
//Executes when the none of the above condition is true.
}
![Page 51: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/51.jpg)
Sentencias condicionales if ... else if ... else
Ejemplo
object Test {
def main(args: Array[String]) {
var x = 30;
if( x == 10 ){
println("Value of X is 10");
}else if( x == 20 ){
println("Value of X is 20");
}else if( x == 30 ){
println("Value of X is 30");
}else{
println("This is else statement");
}
}
}
![Page 52: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/52.jpg)
Scala – Tipos de Bucles
Tipo de bucle Descripción
while Repite un grupo de sentencias mientras una condicion sea verdadera. Este verifica la condicion antes de ejecutar el cuerpo del bucle
Do ... while Como una sentecia while excepto porque la sentencia es comprobada al final de la ejecución del cuerpo
for Ejecuta una secuencia de sentencias en multiples ocasiones y abrevia el codigo que maneja la variable del bucle
![Page 53: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/53.jpg)
Bucle while
Sintaxis
while(condition){
statement(s);
}
![Page 54: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/54.jpg)
Bucle while
Ejemplo object Test {
def main(args: Array[String]) {
// Local variable declaration:
var a = 10;
// while loop execution
while( a < 20 ){
println( "Value of a: " + a );
a = a + 1;
}
}
}
![Page 55: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/55.jpg)
Bucle do while
Garantiza que se ejecute el bloque de código al menos una vez
Sintaxis:
do{
statement(s);
}while( condition );
![Page 56: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/56.jpg)
Bucle do while
Ejemploobject Test {
def main(args: Array[String]) {
// Local variable declaration:
var a = 10;
// do loop execution
do{
println( "Value of a: " + a );
a = a + 1;
}while( a < 20 )
}
}
![Page 57: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/57.jpg)
Bucle for
Bucle for con Rangos
for( var x <- Range ){
statement(s);
}
Range puede ser un rango de números y que son representados como i to j, o , i until j
El operador flecha izquierda <- es llamado generador, genera valores individuales desde el rango
![Page 58: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/58.jpg)
Bucle for
Ejemplo:object Test {
def main(args:Array[String]) {
var a = 0;
// for loop execution with a range
for( a <- 1 to 10){
println("Value of a: " + a );
}
}
}
![Page 59: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/59.jpg)
Bucle for ... until
Ejemplo:object Test {
def main(args:Array[String]) {
var a = 0;
// for loop execution with a range
for( a <- 1 until 10){
println("Value of a: " + a );
}
}
}
![Page 60: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/60.jpg)
Bucle for ... multiples rangos
object Test {
def main(args: Array[String]) {
var a = 0;
var b = 0;
// for loop execution with a range
for( a <- 1 to 3; b <- 1 to 3){
println("Value of a: " + a );
println("Value of b: " + b );
}
}
}
![Page 61: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/61.jpg)
Bucle for con colecciones
Sintaxis
for( var x <- List ){
statement(s);
}
![Page 62: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/62.jpg)
Bucle for con colecciones
Ejemploobject Test {
def main(args: Array[String]) {
var a = 0;
val numList = List(1,2,3,4,5,6);
// for loop execution with a collection
for( a <- numList ){
println( "Value of a: " + a );
}
}
}
![Page 63: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/63.jpg)
Bucle for con filtros
Sintaxis
for( var x <- List
if condition1; if condition2...
){
statement(s);
}
Para agregar mas condiciones, separarlas con ;
![Page 64: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/64.jpg)
Bucle for con filtros
Ejemploobject Test {
def main(args: Array[String]) {
var a = 0;
val numList = List(1,2,3,4,5,6,7,8,9,10);
// for loop execution with multiple filters
for( a <- numList if a != 3; if a < 8 ){
println( "Value of a: " + a );
}
}
}
![Page 65: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/65.jpg)
Bucle for con yield
Sintaxis
var retVal = for { var x <- List
if condition1; if condition2...
}yield x
Las llaves del for se usan para mantener las variables y condiciones
RetVal contiene los valores producto de la ejecucion del for como una colección
![Page 66: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/66.jpg)
Bucle for con yield
Ejemplo:
![Page 67: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/67.jpg)
Sentencia break
No existe una sentencia como en Java para terminar un bucle
A partir de la versión 2.8 de scala se provee de un mecanismo para implementar este comportamiento
![Page 68: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/68.jpg)
Sentencia break
Sintaxis
![Page 69: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/69.jpg)
Sentencia break
Ejemplo
![Page 70: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/70.jpg)
Scala
Funciones
![Page 71: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/71.jpg)
Scala - Funciones
Es un grupo de sentencias que juntas ejecutan una tarea. Scala soporta funciones y métodos Una función en escala es un objeto completo el cual
puede ser asignado a una variable Una función que es definida como un miembro de algún
objeto es llamada un método. Una definición de una función puede aparacer en
cualquier parte de un código fuente y es permitido anidar funciones
Nombres de funciones pueden contener caracteres como + , ++, ~, &, -, --, \, /
![Page 72: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/72.jpg)
Scala - Funciones
Declaración
Sintaxis
def functionName ([list of parameters]) : [return type]
Definiciones
def functionName ([list of parameters]) : [return type] = {
function body
return [expr]
}
![Page 73: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/73.jpg)
Scala - Funciones
Return Type puede ser cualquier tipo de dato válido de scala
Lista de parámetros es una lista de variables separadas por comas
La lista de parámetros y return type son opcionales.
Ejemplo
![Page 74: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/74.jpg)
Scala - Funciones
Una función que no retorna nada puede retornar Unit que es el equivalente a void en Java. Indica que la función no retorna nada
![Page 75: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/75.jpg)
Scala – Llamada de funciones
Scala provee distintas variaciones sintácticas para invocar a un método.
Sintaxis
functionName( list of parameters )
![Page 76: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/76.jpg)
Scala – Llamada de funciones
Si una función es llamada usando una instancia de un objeto deberíamos utilizar la notación de punto similar a Java.
Sintaxis
[instance.]functionName( list of parameters )
![Page 77: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/77.jpg)
Scala – Llamada de funciones
Ejemplo
![Page 78: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/78.jpg)
Scala - Closures
Es una función cuyo valor de retorno depende del valor de una o más variables declaradas fuera de esta función
val multiplier = (i:Int) => i * 10
val multiplier = (i:Int) => i * factor
var factor = 3
val multiplier = (i:Int) => i * factor
![Page 79: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/79.jpg)
object Test {
def main(args: Array[String]) {
println( "muliplier(1) value = " + multiplier(1) )
println( "muliplier(2) value = " + multiplier(2) )
}
var factor = 3
val multiplier = (i:Int) => i * factor
}
![Page 80: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/80.jpg)
Scala-Strings
En Scala, como en Java, una cadena es un objeto inmutable, no se puede modificar. Para hacer modificaciones se usa String Builder.
![Page 81: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/81.jpg)
Scala - Strings
Longitud
Concatenar
![Page 82: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/82.jpg)
Scala-Strings
Formateando Strings
![Page 83: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/83.jpg)
Scala-Arrays
Scala ofrece una estructura de datos, el arreglo, que almacena una colección secuencial de tamaño fijo de elementos del mismo tipo.
Declaración
![Page 84: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/84.jpg)
Scala-Arrays
![Page 85: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/85.jpg)
Scala-Arrays
Arreglo multidimensional
![Page 86: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/86.jpg)
Concatenar
Arreglo con
rango
![Page 87: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/87.jpg)
Scala-Collections
Scala tiene un rico conjunto de colección de la biblioteca. Las colecciones son contenedores de cosas. Los contenedores pueden ser secuenciados, los conjuntos lineales de artículos como List, Tuple, Option, Map etc. Las colecciones pueden tener un número arbitrario de elementos o estar delimitado a cero o elemento de una (por ejemplo, opción).
Las colecciones pueden ser strict or lazy. Lazy colecciones tienen elementos que no pueden consumir la memoria hasta que se accede a ellos, como rangos. Además, las colecciones pueden ser mutable (el contenido de la referencia se puede cambiar) o inmutable (lo que se refiere a una referencia no se cambia nunca). Tenga en cuenta que las colecciones inmutables puede contener items mutables.
![Page 88: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/88.jpg)
Scala-Collections
![Page 89: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/89.jpg)
Scala-Collections
![Page 90: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/90.jpg)
Scala-Clases y ObjetosUna clase es un modelo para los objetos. Una vez
que se define una clase, puede crear objetos a partir de la clase con la palabra clave new.
![Page 91: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/91.jpg)
Scala-ClasesHerencia
![Page 92: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/92.jpg)
Scala-ClasesSingleton
Scala es más orientado a objetos de Java en Scala porque no podemos tener miembros estáticos. En su lugar, Scala tiene objetos únicos.
Un singleton es una clase que sólo puede tener un ejemplo de instancia. objeto. Se crea el objeto con la palabra clave singleton en lugar de palabra clave class.
No puede crear instancias de un objeto único, no se puede pasar parámetros al constructor principal.
![Page 93: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/93.jpg)
Scala-Clases
![Page 94: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/94.jpg)
Scala-TraitsUn trait encapsula definiciones de métodos y de atributo,
que luego pueden ser reutilizados por mezclándolos en clases. A diferencia de la herencia de clases, en el que cada clase debe heredar de una sola superclase, una clase puede mezclar en cualquier número de traits.
Los traits se utilizan para definir los tipos de objetos mediante la especificación de la firma de los métodos admitidos.
Los traits pueden ser parcialmente implementados, pero no pueden tener parámetros de constructor.
![Page 95: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/95.jpg)
Scala-Traits
![Page 96: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/96.jpg)
Scala-Pattern Matching
Pattern matching es la segunda característica más utilizada de Scala, después de valores de function y closures..
Una pattern matching incluye una secuencia de alternativas, cada uno comenzando con la palabra clave case. Cada alternativa incluye un patrón y las expresiones uno o más, que se evaluará si el patrón coincide. Un símbolo de flecha => separa el patrón de las expresiones.
![Page 97: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/97.jpg)
Scala-Pattern Matching
![Page 98: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/98.jpg)
Scala-Matching using case ClassesLas clases case son clases especiales que se
utilizan en la comparación de patrones con expresiones case. Sintácticamente, estas son las clases estándar con un modificador especial: case
![Page 99: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/99.jpg)
Scala-Regular Expressions
Scala soporta expresiones regulares con Regex classe disponibles en el paquete scala.util.matching
![Page 100: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/100.jpg)
Scala-Regular Expressions
![Page 101: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/101.jpg)
Scala-Regular Expressions
![Page 102: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/102.jpg)
Scala-Exception Handling
• Las excepciones en Scala funcionan como excepciones en muchos otros lenguajes como Java. En lugar de devolver un valor de manera normal, un método puede terminar lanzando una excepción.
• Scala en realidad no comprueba excepciones.
• Si desea controlar las excepciones se utiliza un try {...} catch {...} bloque como lo haría en Java, salvo que el bloque catch coincidente se utiliza para identificar y manejar las excepciones.
![Page 103: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/103.jpg)
Scala- Handling exceptions
• Throwing exceptions:
Lanzar una excepción es como en Java. Se crea un objeto de excepción y luego lo lanza con la palabra clave throw:
throw new IllegalArgumentException
• Catching exceptions:
Scala usa try / catch para cualquier excepción en un solo bloque y ejecuta pattern matching usando el bloque case.
![Page 104: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/104.jpg)
Scala-Handling exceptions
![Page 105: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/105.jpg)
Scala-Handling exceptions
Puede utilizar una expresión con una cláusula finally si quiere hacer algo de código que se ejecutará independientemente de cómo la expresión termina.
![Page 106: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/106.jpg)
Scala- Files I/O
• Scala está abierta para hacer uso de cualquier objetos Java y java.io.File es uno de los objetos que pueden ser utilizados en la programación Scala para leer y escribir archivos.
![Page 107: Scala Ucuenca 2](https://reader033.vdocuments.site/reader033/viewer/2022061605/55cf967e550346d0338bd25c/html5/thumbnails/107.jpg)
Scala-Files I/O
• Leyendo desde
consola
• Leyendo el contenido
de un archivo