Il costrutto for

Un'altra istruzione utile per il controllo del flusso del programma è l'istruzione for. Si tratta di un iteratore, che permette di eseguire operazioni cicliche sui dati prescelti, per esempio un range di elementi. La sintassi Kotlin del costrutto per eseguire un'operazione su un range di elementi:

for (x2 in 1..x1)

{

println(x2)

}

L’operatore .., come già accennato serve per creare un range di elementi. Se invece volete cambiare il passo dovrete usare step (al posto di un incremento singolo, uno doppio o triplo):

for (x2 in 1..x1 step 2)

Terrà il passo due, saltando quindi un elemento ogni due.

Un altro problema spesso ignorato è quello di percorrere il ciclo all’inverso, ovvero dall’elemento a più alto valore a quello più basso. Non funziona scrivere:

for (x in 100..1) NO!

il ciclo non partirebbe neanche (nonostante il codice compila e non genera nessuna eccezione run-time), la scrittura giusta è:

for (x in 100 downTo 1)

L'operatore downTo, similmente a .. genera un range di elementi inversi: dal più grande al più piccolo.

Inoltre esiste un terzo operatore per realizzare dei range: until. Il funzionamento è molto simile a .., solo che l'ultimo elemento non è incluso, come dimostra il seguente codice:

fun main(args: Array<String>){

for(i in 1..10) {

print("$i ")

}

println()

for(i in 1 until 10) {

print("$i ")

}

}

L'outupt dello Snippet è il seguente:

1 2 3 4 5 6 7 8 9 10

1 2 3 4 5 6 7 8 9

Come si nota nella seconda riga, quella dedicata all'operatore until, manca il 10.

Sia con l'operatore downTo che con until è possibile aggiungere uno step:

fun main(args: Array<String>){

for(i in 1 until 10 step 2) {

print("$i ")

}

println()

for(i in 10 downTo 1 step 2) {

print("$i ")

}

}

L'output dello Snippet è il seguente:

1 3 5 7 9

10 8 6 4 2

Come si nota ha fatto un elemento si ed uno no, in entrambi i casi.

Il ciclo for naturalmente si può usare anche per "sfogliare" Array o collezioni, ma non preoccupatevi lo vedrete nelle prossime lezioni!

val items = listOf("Hello", "World", "!")

for(item in items) {

print(item)

print(" ")

}

for anniadiati

Spesso risulta utile far uso di quelli che vengono definiti cicli annidati, cioè di cicli inseriti all'interno del corpo di un altro ciclo. L'esempio riportato di seguito, ad esempio, fa uso di un ciclo for annidato per generare una tavola pitagorica.

for(i in 1..10) {

for(j in 1..10) {

print(j*i)

print(" ")

}

println()

}

L'output del programma sarà:

1 2 3 4 5 6 7 8 9 10

2 4 6 8 10 12 14 16 18 20

3 6 9 12 15 18 21 24 27 30

4 8 12 16 10 24 28 32 36 40

5 10 15 20 25 30 35 40 45 50

6 12 18 24 30 36 42 48 54 60

7 14 21 28 35 42 49 56 63 70

8 16 24 32 40 48 56 64 72 80

9 18 27 36 45 54 63 72 81 90

10 20 30 40 50 60 70 80 90 100

Per ogni iterazione del primo ciclo, viene eseguito tutto il secondo ciclo. Nel nostro esempio quindi per ogni iterazione del primo ciclo vengono eseguite tutte e dieci le iterazioni del secondo. Ogni esecuzione completa del secondo ciclo comporta la compilazione di una riga dell'output.

results matching ""

    No results matching ""