viernes, 30 de diciembre de 2016

Un resumen de Scala for the Impatient, parte 5

Uso avanzado de loops y loops por comprensión 

Me costo mucho buscar la traducción de “for Comprehensions” por lo tanto decidí poner “por comprensión”. Si le parece mal me avisan y lo cambio.

Como vimos el operador for es mucho más rico en scala que en java o C.

Se puede tener múltiples generadores de la forma variable <- expresión separados por ;

 for (i <- 1 to 3; j <- 1 to 3) print((10 * i + j) + " ")
// Prints 11 12 13 21 22 23 31 32 33

cada generador puede tener su condición:

for (i <- 1 to 3; j <- 1 to 3 if i != j) print((10 * i + j) + " ")
// Prints 12 13 21 23 31 32

También se puede usar n cantidad de variables:

for (i <- 1 to 3; from = 4 - i; j <- from to 3) print((10 * i + j) + " ")
// Prints 13 22 23 31 32 33

Con la palabra yield se puede retornar una colección que este formada por el resultado de cada iteración:

for (i <- 1 to 10) yield i % 3
// Yields Vector(1, 2, 0, 1, 2, 0, 1, 2, 0, 1)

Este tipo de loops se denominan “por compresión”. De esta forma podemos generar diferentes colecciones:

for (c <- "Hello"; i <- 0 to 1) yield (c + i).toChar
// Yields "Hieflmlmop"

for (i <- 0 to 1; c <- "Hello") yield (c + i).toChar
// Yields Vector('H', 'e', 'l', 'l', 'o', 'I', 'f', 'm', 'm', 'p')

En el ejemplo podemos ver que la lista generada es compatible con la primer variable que se itera.

No hay comentarios.:

Publicar un comentario