Home Testo Corso Swift Introduzione al Ciclo for

Introduzione al Ciclo for

1398
2
Operazioni-Cicliche-for...in

In questa lezione vediamo cosa è un ciclo for, a cosa serve e come utilizzarlo.

Nelle scorse lezioni abbiamo visto come conservare le informazioni in variabili, array e dizionari e come interagire con loro.

Tra le diverse funzioni trattate abbiamo parlato di come leggere i dati memorizzati in esse. leggendo gli esempi avrai notato che tutti fanno riferimento alla lettura di un singolo elemento ma se avessi la necessità di stampare per esempio tutto il contenuto di una array o di un dizionario?

Dalle conoscenze fin qui acquisite dovrei richiamare ogni singolo elemento e quindi scrivere:

// Array composta da 7 numeri
var miaArray = [10,23,56,78,90,45,78]

// Stampo array
print (miaArray[0])
print (miaArray[1])
print (miaArray[2])
print (miaArray[3])
print (miaArray[4])
print (miaArray[5])
print (miaArray[6])

Procedimento giusto ma se l’array fosse composta da 30, 100, 1.000 elementi? Dovrei scrivere 30, 100, 1.000 print(miaArray[indice], e se cancellassi dei valori nell’array e quindi variare la Sua lunghezza? Il risultato sarebbe un crash fatal error: Index out of range in quanto non variando il numero dei print il compilatore si troverebbe indici non più esistenti.

Ecco allora che grazie all’istruzione for o meglio dire Ciclo For possiamo risolvere il problema con poche righe di codice.

Il nome stesso dice tutto, ovvero tramite questa istruzione possiamo creare un ciclo che esegue delle determinate operazioni fino al verificarsi di una condizione impostata.

// Sintassi
for <variabile> in <intervallo> {
    <blocco istruzioni>
}

// Esempio stampo 10 numeri da 1 a 10
// con i print dovrei fare

print("1")
print("2")
print("3")
print("4")
print("5")
// ecc ecc fino a 10


// Con un ciclo for invece posso ottere lo stesso risultato facendo
var range = 1...10
 
for numero in range {
    print(numero)
}


In entrambi i casi il risultato è la stampa dei numeri da 1  a 10 ma nel secondo caso come avrai notato il codice scritto è minore con la possibilità di variare il ciclo modificando semplicemente la variabile range.

In pratica quando il compilatore legge la parola chiave for capisce che sta per iniziare un ciclo ed esegue tutte le istruzioni presenti tra le parentesi graffe in modo ciclico fino a quando la condizione presente dopo la parola chiave in è verificata ovvero True utilizzando la variabile di lettura “numero” da noi scelta che assume ogni volta il valore della variabile range.

Nello specifico il compilatore come detto legge la parola chiave for e capisce che sta iniziando un ciclo, la variabile di lettura numero assume il primo valore del range, essendo all’inizio il sua valore è 1 quindi  passa ad eseguire il codice presente tra le parentesi graffe che in questo caso è un semplice print della varibile numero, stampa 1 poi si chiedere la variabile range è true o false in questo caso false perchè 1 quindi aumente di 1 la variabile numero è ripete il codice stampando 2 essendo 2 il valore di numero ecc ecc.

Questo procedimento sarà eseguito fino a quando la variabile range non raggiunge il valore 10 e la condizione diventa false, a questo punto il compilatore capisce che il ciclo è finito e continua ad eseguire il resto del codice.

Il simbolo underscore

La variabile di lettura non è in tutti i casi necessari. Il linguaggio Swift ha creato la sintassi “for <variabile> in <range>” perché in moltissimi casi c’è la necessità di leggere i valori contenuti nel range. In altri casi non è necessario leggere i valori del range e quindi è possibile omettere la variabile di lettura.

Ipotizziamo di voler stampare 20 volte la stringa “Ciao Francesco”. In questo caso non c’è nessuna parte di codice che varierebbe nel tempo in quanto il contenuto dei print è tutto uguale e l’unica cosa che cambia è il numero di volte che deve essere stampata questa scritta.

for _ in <range> {
    <blocco istruzioni>
}

// codice 
for _ in 1...20 {
    print("ciao Francesco")
}

La variabile di lettura viene inserita solo quando si vuole utilizzare il valore del range, letto dal ciclo, all’interno del blocco d’istruzioni.

Leggere una Array intera

Procedimento analogo all’esempio precedente solo che in questo caso il range è definito dalla lunghezza dell’array che viene gestito in modo dinamico e autonomo dal ciclo quindi tornando al problema descritto all’inizio della lezione possiamo tranquillamente aumentare o diminuire la lunghezza della array ovvero il suo indice senza procupparsi di andare fuori range proprio perchè il ciclo gestisce il tutto.

// Definizione Array
 var miaArray = ["Francesco", "Mario", "Luca", "Stefano", "Valerio"]

// Leggo Array con un Ciclo for

for leggo in miaArray {
    
    print (leggo)
}

Nell’esempio il compilatore in automatico capisce che il range è una array e recupera il suo indice poi parte dall’indice 0 e inserisce il contenuto di questo indice nella variabile leggo, esegue le istruzioni tra le parentesi graffe quindi stampa “francesco” e poi si chiede, l’array è finita? no!  Allora incremento l’indice e rieseguo il codice… questo fino ad arrivare alla fine all’indice dell’array.

Leggere un Dizionario intero

Come potrai immaginare il procedimento non cambia, unica differenza è la possibilità di utilizzare una o due variabili di lettera in quando come sai un dizionario è composto da una coppia di valori “Chiave : Valore”.  Nell’esempio di seguito ti riporto entrambi i procedimenti.

// Dizionario
var mioDizionario = ["Francesco" : 100, "Mario" : 150, "Luca" : 45, "Massimo" : 70 ]

//  Con 2 Variabili di lettura
for (nome, punteggio) in mioDizionario {

print ("\(nome) ha un punteggio di \(punteggio)")
}

// con una sola variabile di lettura
for utente in mioDizionario {

print ("\(utente.0) ha un punteggio di \(utente.1)")
}

Nel primo metodo ho creato 2 variabili di lettura dove nella prima inserisco l’indice del dizionario e nella seconda il valore, nel secondo metodo ho inserito entrambi in un unica variabile e li richiamo utilizzando il valore .0 per l’indice e .1 per il valore.

Per qualunque dubbio o domanda scrivi un commento in questa lezione.

2 Commenti