Ordre de plusieurs blocs defer
Comprenez l’ordre d’exécution inversé des instructions defer.
Ordre de plusieurs blocs defer est une leçon Swift Academy gratuite sur CoddyKit. Ceci est la leçon 2 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.
Plusieurs defer
Une portée peut contenir plusieurs blocs defer. Ils s'exécutent tous à la sortie de la portée.
func demo() {
defer { print("A") }
defer { print("B") }
print("body")
}
demo()Ordre inverse (LIFO)
Les blocs différés s'exécutent dans l'ordre inverse de leur déclaration : le dernier déclaré s'exécute en premier.
func order() {
defer { print("1") }
defer { print("2") }
defer { print("3") }
print("start")
}
order()Pourquoi LIFO
L'ordre LIFO reflète la manière dont l'initialisation et le nettoyage s'imbriquent : l'initialisation la plus récente est annulée en premier.
func resources() {
print("open A")
defer { print("close A") }
print("open B")
defer { print("close B") }
print("use both")
}
resources()Modèle mental de la pile
Imaginez les defer comme une pile : chacun y empile une tâche, puis les tâches sont dépilées dans l'ordre inverse lorsque la portée se termine.
func stack() {
defer { print("pop first-declared last") }
defer { print("pop last-declared first") }
print("push done")
}
stack()Defers et état local
Chaque defer capture les variables environnantes et voit leurs values finales lorsqu'il s'exécute.
func state() {
var x = 1
defer { print("x is", x) }
x = 42
}
state()Defers dans une boucle
Dans une boucle, chaque itération enregistre et exécute ses propres defer dans l'ordre LIFO à la fin de cette itération.
for i in 1...2 {
defer { print("late", i) }
defer { print("early", i) }
print("body", i)
}Portées imbriquées
Les defer s'exécutent lorsque leur propre portée se termine : le defer d'un bloc interne s'exécute donc avant celui d'un bloc externe.
func nested() {
defer { print("outer defer") }
do {
defer { print("inner defer") }
print("inner body")
}
print("outer body")
}
nested()Nettoyage prévisible
L'ordre LIFO signifie que les paires ouverture/fermeture associées se ferment naturellement dans le bon ordre.
func files() {
print("open log")
defer { print("flush log") }
print("open db")
defer { print("disconnect db") }
print("transaction")
}
files()Lire l'ordre d'exécution
Pour prévoir la sortie, lisez les defer de bas en haut : le dernier defer de la portée affiche son résultat en premier.
func quiz() {
defer { print("one") }
defer { print("two") }
print("body runs first")
}
quiz()Combiner avec return
Tous les defer enregistrés s'exécutent tout de même dans l'ordre LIFO, même lorsque la fonction se termine prématurément.
func early(_ skip: Bool) {
defer { print("cleanup 1") }
defer { print("cleanup 2") }
if skip { return }
print("full body")
}
early(true)Bonne pratique
Déclarez chaque nettoyage juste après son initialisation et faites confiance à l'ordre LIFO pour les défaire correctement.
func pattern() {
print("acquire 1")
defer { print("release 1") }
print("acquire 2")
defer { print("release 2") }
print("work")
}
pattern()Vérification rapide
Vérifiez l'ordre d'exécution de defer.
Récapitulatif
Plusieurs blocs defer s'exécutent dans l'ordre inverse (LIFO) à la sortie de la portée : le dernier déclaré s'exécute en premier. Cela défait naturellement les paires d'initialisation et de nettoyage imbriquées dans le bon ordre, même lors d'un retour prématuré.
func demo() {
defer { print("1") }
defer { print("2") }
print("body")
}
demo()Questions Fréquemment Posées
La leçon « Ordre de plusieurs blocs defer » est-elle gratuite ?
Oui — le texte complet de « Ordre de plusieurs blocs defer » 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 « Ordre de plusieurs blocs defer » ?
Comprenez l’ordre d’exécution inversé des instructions defer. 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 2 sur 4.
Combien de temps prend la leçon « Ordre de plusieurs blocs defer » ?
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
- Fonctionnement de defer
- Ordre de plusieurs blocs defer
- defer pour libérer les ressources
- defer avec les erreurs et les retours anticipés