... for loop in Scala

La sintassi del for loop è:

for (<identifier> <- <iterator>) [yield] [<expression>]

Si noti che yield è opzionale, e serve per produrre un iterabile che possiamo assegnare ad un valore.

Per esempio:

for (x <- 1 to 10) { println(s"Elemento $x") }

Elemento 1
Elemento 2
Elemento 3
Elemento 4
Elemento 5
Elemento 6
Elemento 7
Elemento 8
Elemento 9
Elemento 10

In questo modo ad ogni iterazione stampo la stringa “Elemento x”.

Se invece vogliamo ottenere un iterabile che contenga le stringhe “Elemento x”, da usare in un secondo tempo, posso usare yield

for (x <- 1 to 7) yield { s"Elemento $x" }

res8: scala.collection.immutable.IndexedSeq[String] = Vector(Elemento 1, Elemento 2, Elemento 3, Elemento 4, Elemento 5, Elemento 6, Elemento 7)

il risultato è un vettore di stringhe, che è un sotto-tipo di un immutable.IndexedSeq

Naturalmente per riutilizzare questo vettore devo assegnarlo ad un valore:

val vec = for (x <- 1 to 7) yield { s"Elemento $x" }

vec: scala.collection.immutable.IndexedSeq[String] = Vector(Elemento 1, Elemento 2, Elemento 3, Elemento 4, Elemento 5, Elemento 6, Elemento 7)

Adesso posso iterare su questo vettore

vec.foreach(println)

Elemento 1
Elemento 2
Elemento 3
Elemento 4
Elemento 5
Elemento 6
Elemento 7

In questo modo abbiamo mappato i numeri da 1 a 10 in stringhe corrispondenti, ottenendo un iterabile che può essere usato in un altro for loop.

Riferimenti

Questo esempio è ispirato da:

Jason Swartz – Learning Scala – O’Really

Leave a Reply

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

You may use these HTML tags and attributes:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>