Ordenação de Vários Blocos defer
Entenda a ordem inversa de execução de defer.
Ordenação de Vários Blocos defer é uma aula grátis de Swift Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Swift Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Swift Academy inclui 4 aulas no total.
Vários adiamentos
Um escopo pode conter vários blocos defer. Todos são executados na saída do escopo.
func demo() {
defer { print("A") }
defer { print("B") }
print("body")
}
demo()Ordem inversa (LIFO)
Os blocos adiados são executados na ordem inversa da declaração: o último declarado é executado primeiro.
func order() {
defer { print("1") }
defer { print("2") }
defer { print("3") }
print("start")
}
order()Por que LIFO
A ordenação LIFO reproduz a forma como a configuração e a desmontagem se aninham: a configuração mais recente é desfeita primeiro.
func resources() {
print("open A")
defer { print("close A") }
print("open B")
defer { print("close B") }
print("use both")
}
resources()Modelo mental de pilha
Pense nos adiamentos como uma pilha: cada um adiciona uma tarefa, e elas são removidas na ordem inversa quando o escopo termina.
func stack() {
defer { print("pop first-declared last") }
defer { print("pop last-declared first") }
print("push done")
}
stack()Adiamentos e estado local
Cada adiamento captura as variáveis ao redor e vê os valores finais delas quando é executado.
func state() {
var x = 1
defer { print("x is", x) }
x = 42
}
state()Adiamentos em um laço
Dentro de um laço, cada iteração registra e executa seus próprios adiamentos na ordem LIFO ao final da iteração.
for i in 1...2 {
defer { print("late", i) }
defer { print("early", i) }
print("body", i)
}Escopos aninhados
Os adiamentos são executados quando o próprio escopo termina; por isso, o adiamento de um bloco interno é executado antes do adiamento de um bloco externo.
func nested() {
defer { print("outer defer") }
do {
defer { print("inner defer") }
print("inner body")
}
print("outer body")
}
nested()Limpeza previsível
A ordem LIFO faz com que os pares correspondentes de abertura e fechamento sejam naturalmente fechados na sequência correta.
func files() {
print("open log")
defer { print("flush log") }
print("open db")
defer { print("disconnect db") }
print("transaction")
}
files()Lendo a ordem
Para prever a saída, leia os adiamentos de baixo para cima: o último defer no escopo imprime primeiro.
func quiz() {
defer { print("one") }
defer { print("two") }
print("body runs first")
}
quiz()Combinando com o retorno
Todos os adiamentos registrados ainda são executados na ordem LIFO mesmo quando a função retorna antecipadamente.
func early(_ skip: Bool) {
defer { print("cleanup 1") }
defer { print("cleanup 2") }
if skip { return }
print("full body")
}
early(true)Prática recomendada
Declare cada desmontagem logo após sua configuração e confie na ordenação LIFO para desfazê-las corretamente.
func pattern() {
print("acquire 1")
defer { print("release 1") }
print("acquire 2")
defer { print("release 2") }
print("work")
}
pattern()Verificação rápida
Teste a ordenação do adiamento.
Recapitulação
Vários blocos defer são executados na ordem inversa (LIFO) na saída do escopo: o último declarado é executado primeiro. Isso desfaz naturalmente os pares aninhados de configuração e desmontagem na ordem correta, mesmo em um retorno antecipado.
func demo() {
defer { print("1") }
defer { print("2") }
print("body")
}
demo()Perguntas Frequentes
A aula “Ordenação de Vários Blocos defer” é grátis?
Sim — o texto completo de “Ordenação de Vários Blocos defer” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Swift Academy, atualize para CoddyKit PRO. O curso de Swift Academy inclui 4 aulas no total.
O que vou aprender em “Ordenação de Vários Blocos defer”?
Entenda a ordem inversa de execução de defer. Você pratica Swift Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Swift Academy?
Nenhuma experiência prévia é necessária. Swift Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.
Quanto tempo leva a aula “Ordenação de Vários Blocos defer”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Swift Academy?
Sim. Cada aula de Swift Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Como funciona defer
- Ordenação de Vários Blocos defer
- defer para Limpeza de Recursos
- defer com Erros e Retornos Antecipados