Un ciclo for più moderno

Swift

Fra le proposte per la terza versione di Swift, la prima major release da quando il nuovo linguaggio di Apple è stato reso Open Source, ci sono 2 proposte che lasceranno molti nostalgici come me, con l’amaro in bocca.

Mi riferisco alla proposta già  accettata e che verrà  introdotta con la versione 3.0, di rimuovere definitivamente la sintassi C-like per i cicli for in favore di una sintassi più moderna.
In breve, ecco come trasformare un classico ciclo for C-like in un ciclo for con una sintassi Swift-like.

// Usiamo un array di 5 elementi come esempio
let array = [10,20,30,40,50]

// Un ciclo for con sintassi C-like:
for (var i=0; i < array.count; i++) {
  print("array[\(i)] \(array[i])")
}

Per trasformare il nostro ciclo in un ciclo Swift-like, possiamo usare il ciclo for-in ed un Range Operator:

 // Un ciclo for-in con range operator:
for var i in 0..< array.count {
  print("array[\(i)] \(array[i])")
}

La sintassi del ciclo for-in può essere formalizzata in questo modo:
for <nome_variabile> in <nome_array> { ... }

ed il suo uso diventa molto presto naturale, sopratutto quando dobbiamo scorrere un array di oggetti.
Ad ogni iterazione, nome_variabile conterrà  l’ i-esimo elemento del nostro array e potremo accedere al suo valore all’interno del nostro ciclo:

// Prendiamo in considerazione un array di stringhe:
let names = ["Luca", "Mario", "Riccardo", "Alessandro"]

// Usiamo il ciclo for-in per prendere in analisi un nome alla volta:
for name in names {
 print("Ciao \(name)!")
}

Nel caso, all’interno del ciclo, dovessimo aver bisogno di conoscere l’indice dell’ elemento corrente, possiamo usare il metodo enumerate() che restituisce una tupla contenente l’indice e l’oggetto:

for (i, name) in names.enumerate() {
 print("names[\(i)] \(name)!")
}

La seconda proposta a cui ho accennato è quasi una conseguenza della prima, quella cioè di rimuovere gli operatori ++ e – – .

Non è la prima volta che in un linguaggio di programmazione moderno, nato dopo il linguaggio C, non si trovano gli operatori di autoincremento e autodecremento; anche Ruby, linguaggio noto soprattutto per la sua sintassi moderna, non prevede per scelta dichiarata gli operatori ++ e – –  perchè a causa dei diversi effetti dipendenti dalla loro posizione (pre-incremento e post-incremento) possono causare ambiguità e conseguenti errori.
Swift, che oggi alla versione 2.1.1 prevede questi operatori, potrebbe abbandonarli presto in favore di qualcosa di più esplicito e sicuro.

Per concludere, vi segnalo questo repository su GitHub che contiene una serie di playgrounds in Swift compreso quello relativo agli esempi citati.

Condividi se ti è piaciuto

Leggi altri articoli