Compatibile con Xcode 8

While e Switch in Swift. Un altro modo per esprimere ciclicità e controllo

Con la lezione precedente, interamente incentrata sul ciclo for del linguaggio Swift, hai appreso che esiste un modo velocissimo per eseguire tante istruzioni con una manciata di righe di codice.

Come la programmazione ci insegna non esiste né un solo modo né una sola sintassi per risolvere un problema.

Ecco perché, in questa lezione, voglio estendere le tue conoscenze in materia di cicli e istruzioni di controllo, ti parlerò del ciclo while e ti introdurrò una nuova istruzione condizionale, lo switch.

Aspetta un secondo Peppe.

Perché dovrebbero esistere diversi modi per scrivere un ciclo o per fare un controllo del codice?

Il motivo per cui il linguaggio Swift, come anche altri linguaggi, utilizzano diverse parole chiave per esprimere lo stesso concetto, è paragonabile allo scegliere, o meno, una strada A piuttosto ché una strada B per raggiungere un punto.

Mi spiego meglio.

Durante lo sviluppo delle tue future applicazioni, ci saranno casi in cui, utilizzare un sistema o l’altro renderà più snello e leggibile il codice da te scritto.

Ovviamente esistono motivazioni di carattere tecnico che non terrò in considerazione in questo corso. Considerazioni che sono alla base della scelta del percorso A o B. La strada A, per esempio, è più veloce ma più usurante per la vettura (come una strada che taglia per una montagna), mentre la strada B è più lenta ma meno pesante per il guidatore.

Detto ciò, sei pronto a studiare l’istruzione While e Switch in Swift?

While e Repeat-While. Altri modi per esprimere la ciclicità con il linguaggio Swift

Oltre al ciclo for, il linguaggio Swift, mette a disposizione anche il ciclo while e repeat-while.

Il meccanismo è sempre lo stesso, eseguono in modo ricorsivo un numero determinato di istruzioni fin quando una certa condizione non è più verificata.

Il ciclo while in Swift lo chiamerai a condizione iniziale quando prima verifica che la condizione è vera e poi esegue il ciclo:

Mentre il ciclo repeat-while lo chiamerai a condizione finale quando la condizione di verifica si troverà alla fine. Quindi, prima esegue sempre un’istruzione e poi ne verifica la condizione:

While e Repeat linguaggio swift

L’istruzione Switch. Gestire il flusso d’esecuzione in maniera intuitiva

Lo switch puoi considerarlo come un parente dell’istruzione if-else.

La sua caratteristica è quella di controllare lo stato di un valore e creare dei particolari blocchi di codice che si attivano solo se quel valore corrisponde al particolare caso da “acchiappare”.

Peppe, e che vor di?

Ti faccio vedere la sintassi e poi te la spiego:

Un blocco di codice si attiva solo quando la variabileControllata è uguale ad uno dei valori dei case.

Mi spiego meglio, al solito, facendoti un esempio.

Esercizio 0. Implementa una istruzione switch che controlli se la lettera contenuta in una variabile è una vocale, consonante oppure nessuna dei due.

Ogni blocco d’istruzioni di un case comincia dopo i due punti.

Lo switch controlla il valore della variabile, entra dentro il codice, esegue il case dove il valore della variabile è acchiappato ed infine esce dallo switch.

A differenza dell’if-else, qui, il blocco di codice non ha bisogno di essere racchiuso da delle parentesi graffe. Basta inserirlo dopo i due punti che definiscono il case da considerare.

Switch

  1. Ogni case ha bisogno di almeno un’istruzione.
  2. L’intera istruzione switch deve sempre contenere un case di tipo default.

Stesso esempio con l’istruzione if-else

Ah si! Ti dicevo che è un parente dell’if else perché una logica di questo genere l’avresti potuta scrivere così:

Come puoi notare, utilizzando l’if-else avresti perso decisamente molto più tempo a scrivere il codice di controllo.

Quindi, già da questo semplice esempio, puoi cominciare a capire come le diverse istruzioni ti permetteranno di ottenere un codice migliore in base al tipo di problema.

Case che acchiappano intervalli di valori

Ci sono casi in cui ti piacerebbe controllare se un numero appartiene o meno ad un determinato intervallo.

Per esempio, proviamo a scrivere la logica per il controllo della vita di un giocatore.

Se la vita del giocatore, che come massimo è di 100 hp, si dovesse trovare nell’intervallo tra 50 e 0 allora diremo che è in fin di vita. Se invece si trovasse sopra i 50 e fino a 100, il giocatore sarà in buona salute. Altrimenti, se la vita dovesse essere 0, sarà morto.

Con lo switch del linguaggio Swift, per controllare se un valore è compreso tra due numeri, devi utilizzare il Range. I range li hai incontrati nella lezione del ciclo for-in. Per esempio i numeri che vanno da 0 a 50, si esprimono come range 0…50.

Con uno switch, questo esercizio può essere scritto così:

Una cosa che salta subito all’occhio è la pulizia del codice rispetto all’equivalente con if-else.

Perché, tu hai già scritto lo stesso esercizio con l’if-else vero? Fallo immediatamente per rendertene conto tu stesso!

Tip. Nel caso in cui volessi escludere gli estremi, puoi utilizzare la forma del range contratto. Ovvero puoi scrivere un range in questo modo:

Switch con il linguaggio swift

condividi xcoding

Ho impiegato un po’ di tempo a scrivere questo tutorial. Se ti va, ricambia il mio lavoro, con un like alle mie pagine!

[addtoany]

Grazie ;)

Break, continue, fallthrough e return. I controllori del codice in swift

Il codice, come hai visto e appreso, viene eseguito a cascata ovvero parte dalla linea 1 e finisce alla linea x.

Esistono delle parole chiave che alterano il normale svolgimento a cascata, permettendo di saltare da un blocco di codice ad un altro.

Si chiamano break, continue, fallthrough return. Le prime 3 te le spiegherò in questa lezione mentre l’ultima nella lezione sulle funzioni.

Continue

La parola continue comunica di andare avanti spostando l’esecuzione al prossimo ciclo. Un po’ come se dicesse: “Hei, io ho fatto quello che dovevo fare, puoi saltare avanti al prossimo ciclo senza dover finire l’attuale“.

Esercizio 3. Crea il codice che rimuove tutte le vocali da una stringa formando così una stringa semi criptata.

Senza la parola chiave continue non saresti riuscito a risolvere il problema dato che ogni case ha bisogno per forza di un’istruzione da eseguire.

Hai avuto problemi a capire il funzionamento di questa istruzione? Fammelo sapere con un commento! noi non mangiamo sviluppatori.

Break, fermati!

Se continue permetteva di “continuare”, scusa il gioco di parole, break arresta immediatamente l’esecuzione di un blocco di codice.

  • Break in un ciclo: Il break in un ciclo interrompe immediatamente l’esecuzione di tutto l’intero ciclo senza permettergli di andare ai successi.
    L’esecuzione passa, dal ciclo, alla riga di codice immediatamente sotto la parentesi graffa } che chiude il ciclo.
    Nell’esempio utilizzeremo il break per interrompere il salvataggio di una stringa appena incontra uno spazio vuoto.
Il ciclo qui sopra avrebbe dovuto stampare tutta la stringa “AAAA BBBB” ma, avendo messo come condizione l’uscita dal ciclo quando trovato uno spazio vuoto, non ha la possibilità di farlo.

Continue o Break? Impara ad ottimizzare i tempi d’esecuzione

Saper mettere correttamente i break al posto giusto è quello che fa la differenza tra un buon programmatore e un programmatore.

Ogni riga impiega del tempo per essere eseguita.

Immagina che una stringa sia lunga migliaia e migliaia di elementi (ancora peggio se è un array o dizionario), il tuo compito è quello di scovare l’elemento intruso e di interrompere l’esecuzione al ritrovamento dello stesso.

Esercizio 4. Ferma l’esecuzione del ciclo al ritrovamento del carattere “1”, cerca di ottimizzare i tempi!

Con il continue il ciclo viene eseguito 82 volte, ovvero la stringa viene letta per intero anche se ha trovato l’elemento intruso. Con il Break il ciclo viene eseguito 57 volte. Questa è quello che intendo per ottimizzazione del codice.

Anche se per adesso non sembra che ci sia differenza tra i due tipi di implementazione, quando passerai allo sviluppo delle applicazioni ti renderai conto dei tempi biblici che ci vogliono per cercare e recuperare informazioni da database e quant’altro.

Fallthrough

E se volessi unire più case in uno switch?

Fallthrough fa al caso tuo permettendoti, una volta incontrata questa parola chiave, di eseguire il case immediatamente successivo.

Esercizio 5. Quando un numero intero è anche numero primo?

Se il numero interoDaDescrivere appartiene al case allora innescherà anche il fallthrough che eseguirà il case default.

Control Flow linguaggio swift

Considerazioni ed Esercizi

While e Switch del linguaggio Swift, anche se sembrano essere delle cose che difficilmente utilizzerai, saranno ampiamente utilizzati all’interno del successivo corso di sviluppo applicazioni iOS.

Poi, ripeto ancora una volta, conoscere più sistemi che permettono di risolvere un problema ti da quella marcia in più rispetto a chi usa sempre e costantemente gli stessi strumenti.

Esercizi

Ecco alcuni esercizi che ti invito a svolgere

  • Esercizio 6. var array = [“swift”, “c”, “java”, “carne”, “pesce”, “basic”] è un array di stringhe. Crea un codice che analizzi l’array e stampi per gli elementi che rappresentano un linguaggio di programmazione la stringa:  “(elemento) è un linguaggio di programmazione”, per gli altri non esegue niente.
  • Esercizio 7. Un’applicazione scolastica, tra le tante cose, permette di stampare l’elenco degli alunni promossi, bocciati e rimandati a fine anno.
    Dato il seguente dizionario:
    Crea un codice che stampi in console il seguente pattern: “nomeAlunno – bocciato/promosso/rimandato” in base al valore associato al nome. Se l’alunno ha una valutazione “A” o “B” è promosso. Se ha “C” è rimandato. Se ha “D” è bocciato.

Prova a risolvere l’esercizio e se non ci riesci, lascia un commento.

Buona Programmazione!

Changelog

  • 12/04/2017 – Modificato l’esercizio n.7.
  • 14/10/2016 – Aggiunto il Changelog. Modifica al testo del tutorial e assicurata compatibilità con Xcode 8 ed il linguaggio Swift 3.0.

Torna a: Corso gratuito linguaggio di programmazione Swift > Dai controlli alle funzioni del linguaggio Swift

Start typing and press Enter to search

Ciclo for in SwiftLe funzioni in Swift