Menu
Coddy logo textTech

Capture de valeurs

Fait partie de la section Logique et Flux du Journey Swift de Coddy. Leçon 40 sur 56.

Une fermeture mémorise les variables qui étaient dans sa portée au moment de sa création. Le corps de la fermeture peut les lire et même les modifier ultérieurement, y compris après le retour de la fonction environnante. C’est ce qu’on appelle la capture.

func makeCounter() -> () -> Int {
    var count = 0
    return {
        count += 1
        return count
    }
}

let next = makeCounter()
print(next())                    // 1
print(next())                    // 2
print(next())                    // 3

Chaque appel à makeCounter vous donne un tout nouveau count, ainsi deux compteurs ne partagent jamais leur état :

let a = makeCounter()
let b = makeCounter()
print(a())                       // 1
print(b())                       // 1
print(a())                       // 2

La capture est ce qui rend les clôtures plus puissantes que les fonctions ordinaires : elles emportent leur état avec elles. Tu retrouveras la même astuce en JavaScript, Python et dans de nombreux autres langages.

challenge icon

Défi

Moyen

Créez une petite fabrique de compteurs.

Définissez une fonction makeCounter(start: Int, step: Int) qui renvoie une fermeture de type () -> Int. Chaque appel de la fermeture renvoie la valeur suivante : le premier appel renvoie start, le suivant renvoie start + step, le suivant start + 2*step, et ainsi de suite.

Lisez trois entiers depuis l’entrée : start, step et n. Construisez un compteur avec start et step, puis appelez-le n fois et affichez chaque résultat sur sa propre ligne.

Pour l’entrée 5 / 3 / 4, la sortie est :

5
8
11
14

Essayez vous-même

let start = Int(readLine()!)!
let step = Int(readLine()!)!
let n = Int(readLine()!)!

// TODO: makeCounter(start:step:) -> () -> Int qui capture la valeur courante
// puis l'appeler n fois et afficher chaque résultat
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Logique et Flux

Entraînez-vous par vous-même : Playground Swift