In questa lezione parleremo della istruzione di controllo Guard, a cosa serve e come utilizzarla. Introdotta dalla versione 2.0 la funzione Gaurd come aggiunta all’istruzione di controllo if, infatti essa è molto simile ma vediamo subito il suo utilizzo.
guard < condizione > else { < istruzioni > }
Essa offre un sistema veloce ed elegante per performare un’azione solo quando una condizione non è verificata.
La particolarità dell’istruzione guard in Swift, sta nel fatto che, una volta che l’esecuzione del codice è entrata all’interno del blocco else, non si può più uscire se non con un’istruzione di trasferimento di controllo (break, return, continue, ecc.).
L’istruzione guard può essere utilizzata solo all’interno delle funzione, dei cicli, classi e strutture.
var array = ["a","b","c", "d", "e", "f", "g"] // Utilizzo l'istruzione Guard func trovaLettera(lettera: String) -> Bool { for elem in array { guard elem != lettera else { print("Trovata la lettera \(lettera) ") return true } } print("Non ho trovato la lettera \(lettera)") return false } trovaLettera(lettera: "a") // Utilizzo l'istruzione if var array = ["a","b","c", "d", "e", "f", "g"] func trovaLettera(lettera: String) -> Bool { for elem in array { if elem == lettera{ print("Trovata la lettera \(lettera) ") return true } else{ print("Non ho trovato la lettera \(lettera)") return false } } return false } trovaLettera(lettera: "a")
Nell’esempio abbiamo una array di tipo stringa e una funzione che al suo interno presenta un ciclo che controlla se l’elemento richiesto è presente nella array tramite il controllo guard.
Lo stesso risultato si poteva otterene utilizzando un if ma utilizzando l’istruzione guard abbiamo scritto meno codice e reso più leggibile lo stesso.
In pratica utilizzando l’istruzione guard se il suo controllo risulta vero continua con il codice se trova falso entra nell’else ed esegue le instruzioni al suo interno.
Vediamo un altro esempio più eplicito per capire la semplicità del suo utilizzo che ci fa risprmiare codice inutile.
func creaCodiceFiscale(nome: String?, cognome: String?, età: String?) -> String? { guard let veroNome = nome else { return nil } guard let veroCognome = cognome else { return nil } guard let veraEtà = età else { return nil } return(veroNome + veroCognome + veraEtà) } print(creaCodiceFiscale(nome: "Mario", cognome: "Rossi", età: "38")!)
In questo esempio abbiamo creato una funzione che crea una banale forma di codice fiscale dove al suo interno controlla tramite dei controlli guard se i dati richiesti sono inseriti, essendo opzionali se la condizione è vera contiuna altrimenti restituisce nil.
Per qualunque dubbio o domanda scrivi un commento in questa lezione.