0Pricing
Swift Academy · Aula

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

  1. Como funciona defer
  2. Ordenação de Vários Blocos defer
  3. defer para Limpeza de Recursos
  4. defer com Erros e Retornos Antecipados
← Voltar para Swift Academy