Le mot clé guard en Swift 2.0
L'arrivée de Swift en 2013 a apporté un vent d'air frais dans le monde du développement Apple (iOS, OS X, etc..) et Linux.
Par exemple, lorsque je veux tester qu'une variable n'est pas nulle pour pouvoir travailler avec, Swift me permet de coder ainsi :
func exemple() {
var response: NSData?
if let data = response {
data.writeToFile("path/", atomically: true)
}
}
Si response
est nulle on ne rentre pas dans le scope du if
, si response
n'est pas nulle la constante data
est créée avec la valeur de response
et je travaille sur data
.
Le guard statement
Swift 2.0 nous apporte une nouvelle syntaxe pour faire la même chose : il s'agit du mot-clé guard
.
Le même exemple avec guard
:
func exemple() {
var response: NSData?
guard let data = response else {
return
}
data.writeToFile("path/", atomically: true)
}
Ce code fait donc exactement la même chose. Alors pourquoi une nouvelle syntaxe ?
À quoi ça sert ?
Même si les deux codes ont la même finalité, vous vous doutez bien que tout n'est pas exactement pareil.
Les plus observateurs d'entre vous l'ont sûrement déjà remarqué la différence entre if let
et guard else
est la propagation de la constante créée.
Avec if let
data n'existe que dans le scope du if
alors que pour guard
data existe dans tout le scope de la fonction. Ce nouveau statement prend tout son sens dans les cas où la majorité du code de ma fonction dépend de l'existence d'une variable.
Au lieu de mettre tout le code dans le if let
et ainsi de suite pour les inclusions de tests d'existence, je teste ma variable et je travaille à la racine de ma fonction ce qui me permet d'avoir un code bien plus lisible et du coup simple à maintenir.
Pour aller plus loin :