Swift Academy · Leçon

Alternatives non mutantes

Renvoyez de nouvelles valeurs au lieu de modifier sur place.

Leçon 4 sur 413 étapes

Alternatives non mutantes est une leçon Swift Academy gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Swift Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Swift Academy comprend 4 leçons au total.

Renvoyer plutôt que modifier

Au lieu de modifier une instance sur place, une méthode non mutante peut renvoyer une toute nouvelle valeur à laquelle le changement a été appliqué.

struct Counter {
    var value: Int
    func incremented() -> Counter {
        return Counter(value: value + 1)
    }
}
let c = Counter(value: 0)
let next = c.incremented()
print(c.value, next.value)

L'original reste inchangé

Comme rien n'est modifié, la valeur originale est conservée et une nouvelle valeur est produite.

struct Vector {
    var x: Int
    var y: Int
    func scaled(by factor: Int) -> Vector {
        return Vector(x: x * factor, y: y * factor)
    }
}
let v = Vector(x: 2, y: 3)
let big = v.scaled(by: 10)
print(v.x, v.y, big.x, big.y)

Fonctionne avec les instances let

Les méthodes non mutantes peuvent être appelées sur des constantes let, puisqu'elles ne modifient pas le récepteur.

struct Money {
    var cents: Int
    func plus(_ other: Int) -> Money {
        return Money(cents: cents + other)
    }
}
let m = Money(cents: 100)
print(m.plus(50).cents)

Convention de nommage

Convention Swift : les méthodes mutantes utilisent des verbes à l'impératif (sort), tandis que les méthodes non mutantes utilisent des formes au participe passé ou en -ed/-ing (sorted).

var nums = [3, 1, 2]
let ordered = nums.sorted()
nums.sort()
print(ordered, nums)

sorted et sort

La bibliothèque standard suit cette convention : sorted() renvoie un nouveau tableau, tandis que sort() modifie le tableau sur place.

let a = [5, 2, 8, 1]
let b = a.sorted()
print(a)
print(b)

reversed et inversion

De même, reversed() ne modifie pas la valeur. Ici, nous matérialisons le résultat avec Array.

let a = [1, 2, 3]
let b = Array(a.reversed())
print(a, b)

Chaîner des appels non mutants

Les méthodes non mutantes renvoient des valeurs ; vous pouvez donc les chaîner de manière fluide.

let result = [4, 2, 9, 1].sorted().map { $0 * 2 }
print(result)

Style fonctionnel

Renvoyer de nouvelles valeurs au lieu de modifier les valeurs existantes favorise un style fonctionnel, facile à tester et à comprendre.

struct Account {
    var balance: Int
    func deposited(_ n: Int) -> Account {
        return Account(balance: balance + n)
    }
}
let a0 = Account(balance: 0)
let a1 = a0.deposited(100).deposited(50)
print(a0.balance, a1.balance)

Éviter les bogues liés à l'état partagé

Produire de nouvelles valeurs évite les modifications partagées accidentelles, ce qui est particulièrement utile entre plusieurs fils d'exécution.

struct Settings {
    var volume: Int
    func with(volume newVolume: Int) -> Settings {
        return Settings(volume: newVolume)
    }
}
let base = Settings(volume: 5)
let loud = base.with(volume: 11)
print(base.volume, loud.volume)

Quand préférer la mutation

Si vous mettez à jour plusieurs fois une même instance dans une boucle, la mutation sur place peut être plus efficace que la création de nombreuses copies.

var total = 0
for n in 1...5 {
    total += n
}
print(total)

Proposer les deux formes

Les types bien conçus proposent parfois les deux formes, comme la bibliothèque standard, afin que les appelants choisissent entre la mutation et la création d'une nouvelle valeur.

struct Text {
    var value: String
    func uppercased() -> Text {
        return Text(value: value.uppercased())
    }
    mutating func uppercase() {
        value = value.uppercased()
    }
}
var t = Text(value: "hi")
let u = t.uppercased()
t.uppercase()
print(u.value, t.value)

Vérification rapide

Testez une conception non mutante.

Récapitulatif

Comme alternative à la mutation, une méthode non mutante renvoie une nouvelle valeur à laquelle le changement a été appliqué, en laissant l'original intact et en fonctionnant avec des instances let. La convention Swift associe les noms à l'impératif (sort) aux noms en -ed/-ing (sorted).

let a = [3, 1, 2]
let b = a.sorted()
print(a, b)
Gratuit pour commencer

Apprends Swift avec un tuteur IA — gratuit

Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.

Cours
122
Leçons
409

Questions Fréquemment Posées

La leçon « Alternatives non mutantes » est-elle gratuite ?

Oui — le texte complet de « Alternatives non mutantes » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Swift Academy, passe à CoddyKit PRO. Le cours Swift Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Alternatives non mutantes » ?

Renvoyez de nouvelles valeurs au lieu de modifier sur place. Tu pratiques Swift Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Swift Academy ?

Aucune expérience préalable n'est requise. Swift Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.

Combien de temps prend la leçon « Alternatives non mutantes » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Swift Academy ?

Oui. Chaque leçon Swift Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Types valeur et immutabilité
  2. Le mot-clé mutating
  3. Mutating et réaffectation de self
  4. Alternatives non mutantes
← Retour à Swift Academy