Dichiarazione della guardia rapida (con esempi)

In questo articolo imparerai a usare l'istruzione guard per controllare il flusso di esecuzione del tuo programma.

L'istruzione Swift If descrive come eseguire azioni in base a determinate condizioni (valore booleano). In questo articolo, esploreremo i vantaggi dell'istruzione guard rispetto all'istruzione if per controllare il flusso del programma e scrivere codice più semplice e pulito.

Dichiarazione di Swift Guard

L'uso principale dell'istruzione guard è trasferire il controllo del programma fuori da un ambito a determinate condizioni. Queste istruzioni sono simili alle istruzioni if ​​che eseguono istruzioni basate su determinate condizioni (valore booleano) ma a differenza di if, le istruzioni guard vengono eseguite solo quando determinate condizioni non sono soddisfatte.

Inoltre, le dichiarazioni all'interno della guardia devono uscire dall'ambito. Pertanto, dobbiamo istruzioni di controllo del programma utente return, break, continueo throwalla fine della dichiarazione di guardia.

Sintassi dell'istruzione Guard

 espressione di guardia else (// istruzioni // deve contenere un'istruzione di controllo: return, break, continue o throw.) 
  • In questo caso, expression è un'espressione booleana (restituisce o trueo false).
  • Se l'espressione viene valutata a false, guardvengono eseguite le istruzioni all'interno del blocco di codice di .
  • Se l'espressione viene valutata a true, le istruzioni all'interno del blocco di codice di guardvengono ignorate dall'esecuzione.

Come funziona la dichiarazione di guardia?

Nota: La fine della dichiarazione di guardia deve contenere una dichiarazione di controllo return, break, continueo throw.

Esempio 1: come funziona l'istruzione guard?

Una semplice dichiarazione di guardia valida è la seguente:

 guard true else ( print("Condition not met") ) print("Condition met") 

Quando esegui il programma, l'output sarà:

 Condizione soddisfatta

Nel programma precedente, guard contiene un valore booleano vero (la condizione è soddisfatta). Poiché le istruzioni guard vengono eseguite solo quando la condizione non è soddisfatta, l'istruzione all'interno della guardia non viene eseguita. Ecco perché print("Condition met")viene eseguito e le condizioni di output soddisfatte sullo schermo.

Ora cambiamo la condizione in false come:

Esempio 2: l'istruzione guard deve uscire dall'ambito

 guard false else ( print("Condition not met") ) print("Condition met") 

Nel programma sopra, la condizione di guardia valuta a false. Quindi, l'istruzione print("Condition not met")all'interno di else dovrebbe essere eseguita. Ma riceverai un errore che dice che il corpo "guardia" potrebbe non cadere, considera l'utilizzo di un "ritorno" o "lancio" per uscire dall'ambito.

Il messaggio di errore nel semplice mezzo di parole, è necessario trasferire il controllo del programma dalla dichiarazione guardia usando return, break, continueo throwdichiarazioni. Per ora useremo return. E poiché l' returnistruzione può essere utilizzata solo all'interno di una funzione, eseguiremo il wrapping del codice sopra in Swift Functions.

Esempio 3: istruzione guard all'interno di una funzione

Possiamo usare l'istruzione guard all'interno di una funzione in Swift come:

 func someFunction() ( guard false else ( print("Condition not met") return ) print("Condition met") ) someFunction() print("Hello after function call") 

Quando esegui il programma sopra, l'output sarà:

 Condizione non soddisfatta Ciao dopo la chiamata alla funzione 

Nel programma precedente, la condizione guard viene valutata a false, quindi le istruzioni all'interno della guardia vengono eseguite. La prima istruzione print("Condition not met")restituisce Condizione non soddisfatta nella console.

E l'istruzione returntermina l'esecuzione di una funzione e l'istruzione print("Hello, after function call")dopo la chiamata di funzione esegue che restituisce Hello dopo la chiamata di funzione nella console.

Esempio 4: Guardia con optional

Abbiamo visto in Swift Optionals l'uso di if-letper scartare un optional. Tuttavia, possiamo anche usare l'istruzione guard al posto di if-letper scartare un optional con un vantaggio. Il vantaggio principale di scartare un optional con guardia invece di if-letè che possiamo aumentare la portata della variabile scartata.

Vediamolo nell'esempio seguente:

 func changeOptionalStringToUpperCase() ( var name:String? guard let temp = name else ( print("Name is nil. Cannot process") return ) print("Uppercased:(temp.uppercased())") ) changeOptionalStringToUpperCase() 

Quando esegui il programma sopra, l'output sarà:

Il nome è nullo. Impossibile elaborare

Nel programma precedente, è possibile vedere che il valore scartato temp viene utilizzato al di fuori dell'ambito definito dall'istruzione guard. Poiché il nome è definito come opzionale e contiene un valore nullo, l'istruzione guard non riesce a scartare il valore.

Quindi, le istruzioni all'interno di guard else eseguono che stampa Name è nil. Impossibile elaborare l'output e termina la funzione con l' returnistruzione. Il codice equivalente della dichiarazione di guardia di cui sopra if-else è:

 func changeOptionalStringToUpperCase() ( var name:String? if let temp = name ( print("Uppercased:(temp.uppercased())") ) else ( print("Name is nil. Cannot process") return ) //how to access temp here?? Solution:Use Guard ) changeOptionalStringToUpperCase() 

Si noti che due affermazioni sopra sono entrambe valide e svolgono lo stesso lavoro. Ma usando l'istruzione if-let non puoi usare il valore non racchiuso al di fuori dell'istruzione if-let. Ma con l'istruzione guard puoi usare il valore scartato attraverso la funzione.

Esempio 5: guardia con più condizioni

Le istruzioni Guard possono anche concatenare più condizioni separate da virgola (,) come:

 func changeOptionalStringToUpperCase() ( var name:String? = "" guard let temp = name , temp.count> 0 else ( print("Name is nil or an empty string. Cannot process") return ) print("Uppercased:(temp.uppercased())") ) changeOptionalStringToUpperCase()

Quando esegui il programma sopra, l'output sarà:

Il nome è nullo o una stringa vuota. Impossibile elaborare

Nel programma precedente, l'istruzione guard contiene due condizioni separate da virgola.

La prima condizione let temp = namescarta un opzionale che ritorna truenel nostro caso e la seconda condizione temp.count> 0controlla se la stringa scartata ha più di 0 caratteri che restituiscono falsenel nostro esempio.

Pertanto, l'istruzione all'interno dell'istruzione guard esegue l'istruzione print("Name is nil or an empty string. Cannot process")che restituisce Name è nullo o una stringa vuota. Impossibile elaborare nella console e termina la funzione con l' returnistruzione.

Articoli interessanti...