Déclaration de garde rapide (avec des exemples)

Dans cet article, vous apprendrez à utiliser l'instruction de garde pour contrôler le flux d'exécution de votre programme.

Swift If Statement décrit comment effectuer des actions en fonction de certaines conditions (valeur booléenne). Dans cet article, nous explorerons les avantages de l'instruction de garde par rapport à l'instruction if pour contrôler le flux du programme et écrire du code plus simple et plus propre.

Déclaration de Swift Guard

La principale utilisation de l'instruction de garde est de transférer le contrôle du programme hors d'une portée sous certaines conditions. Ces instructions sont similaires aux instructions if qui exécutent des instructions basées sur certaines conditions (valeur booléenne) mais contrairement à if, les instructions guard ne s'exécutent que lorsque certaines conditions ne sont pas remplies.

De plus, les déclarations à l'intérieur du garde doivent sortir de la portée. Par conséquent, nous devons les instructions de contrôle du programme utilisateur return, break, continueou throwà la fin de l'instruction de garde.

Syntaxe de la déclaration de garde

 expression de garde else (// instructions // doit contenir une instruction de contrôle: return, break, continue ou throw.) 
  • Ici, expression est une expression booléenne (renvoie soit trueou false).
  • Si l'expression est évaluée à false, les instructions à l'intérieur du bloc de code de guardsont exécutées.
  • Si l'expression est évaluée à true, les instructions à l'intérieur du bloc de code de guardsont ignorées de l'exécution.

Comment fonctionne la déclaration de garde?

Note: La fin de l'instruction de garde doit contenir une instruction de contrôle return, break, continueou throw.

Exemple 1: Comment fonctionne la déclaration de garde?

Une simple déclaration de garde valide est la suivante:

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

Lorsque vous exécutez le programme, la sortie sera:

 Condition remplie

Dans le programme ci-dessus, guard contient une valeur booléenne true (la condition est remplie). Puisque les instructions de garde ne s'exécutent que lorsque la condition n'est pas remplie, l'instruction à l'intérieur de la garde n'est pas exécutée. C'est pourquoi print("Condition met")est exécuté et affiche la condition remplie à l'écran.

Maintenant, changeons la condition en false comme:

Exemple 2: l'instruction de garde doit quitter la portée

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

Dans le programme ci-dessus, la condition de garde est évaluée à false. Ainsi, l'instruction à l' print("Condition not met")intérieur de else devrait s'exécuter. Mais vous obtiendrez une erreur indiquant que le corps «guard» ne peut pas tomber, pensez à utiliser un «return» ou «throw» pour quitter la portée.

Le message d'erreur dans un langage simple mot signifie, vous devez transférer le contrôle du programme de la déclaration de garde en utilisant return, break, continueou des throwdéclarations. Pour l'instant, nous allons utiliser return. Et comme l' returninstruction ne peut être utilisée qu'à l'intérieur d'une fonction, nous allons envelopper le code ci-dessus dans Swift Functions.

Exemple 3: déclaration de garde à l'intérieur d'une fonction

Nous pouvons utiliser l'instruction de garde à l'intérieur d'une fonction dans Swift comme:

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

Lorsque vous exécutez le programme ci-dessus, la sortie sera:

 Condition non remplie Bonjour après l'appel de fonction 

Dans le programme ci-dessus, la condition de garde est évaluée false, donc les instructions à l'intérieur de la garde s'exécutent. La première instruction print("Condition not met")renvoie une condition non remplie dans la console.

Et l'instruction returnmet fin à l'exécution d'une fonction et de l'instruction print("Hello, after function call")après l'exécution de l'appel de fonction qui génère Hello après l'appel de fonction dans la console.

Exemple 4: Garde avec options

Nous avons vu dans Swift Optionals l'utilisation de if-letpour dérouler une option. Cependant, nous pouvons également utiliser une déclaration de garde à la place de if-letpour déballer une option avec un avantage. Le principal avantage de déballer une option avec garde au lieu de if-letest que nous pouvons augmenter la portée de la variable non emballée.

Voyons cela dans l'exemple ci-dessous:

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

Lorsque vous exécutez le programme ci-dessus, la sortie sera:

Le nom est nul. Impossible de traiter

Dans le programme ci-dessus, vous pouvez voir que la valeur non emballée temp est utilisée en dehors de la portée définie par l'instruction de garde. Puisque, nom est défini facultatif et contient une valeur nulle, l'instruction de garde ne parvient pas à déballer la valeur.

Ainsi, les instructions à l'intérieur de guard else exécutent ce qui affiche Name est nul. Impossible de traiter dans la sortie et met fin à la fonction avec une returninstruction. Le code équivalent de l'instruction de garde ci-dessus if-else est:

 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() 

Remarquez ci-dessus que deux déclarations sont toutes deux valides et font le même travail. Mais en utilisant l'instruction if-let, vous ne pouvez pas utiliser la valeur non encapsulée en dehors de l'instruction if-let. Mais avec l'instruction de garde, vous pouvez utiliser la valeur non emballée tout au long de la fonction.

Exemple 5: Garde avec plusieurs conditions

Les instructions de garde peuvent également enchaîner plusieurs conditions séparées par une virgule (,) comme suit:

 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()

Lorsque vous exécutez le programme ci-dessus, la sortie sera:

Le nom est nul ou une chaîne vide. Impossible de traiter

Dans le programme ci-dessus, l'instruction de garde contient deux conditions séparées par une virgule.

La première condition let temp = namedéballe une option qui retourne truedans notre cas et la seconde condition temp.count> 0vérifie si la chaîne déballée contient plus de 0 caractères, ce qui correspond à falsedans notre exemple.

Par conséquent, l'instruction à l'intérieur de l'instruction de garde exécute l'instruction print("Name is nil or an empty string. Cannot process")dont le nom est nul ou une chaîne vide. Impossible de traiter dans la console et met fin à la fonction avec une returninstruction.

Articles intéressants...