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 :