0Pricing
Swift Academy · Aula

Criando mini-DSLs com construtores de resultados

Crie uma pequena DSL usando @resultBuilder : defina funções construtoras, componha blocos e ofereça suporte a condicionais e loops para uma construção legível.

Criando mini-DSLs com construtores de resultados é uma aula grátis de Swift Academy no CoddyKit. Esta é a aula 1 de 3. 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 3 aulas no total.

Por que usar construtores de resultados?

Objetivo: Transforme blocos legíveis em valores usando @resultBuilder. Você define como os itens se combinam; o local da chamada permanece limpo e declarativo.

Um construtor pequeno

Declaramos buildBlock para unir itens e expomos uma API (lines{}) que retorna uma matriz de cadeias de caracteres a partir de um bloco limpo.

@resultBuilder
struct StringListBuilder {
    static func buildBlock(_ parts: String...) -> [String] { parts }
    // Optional support for conditionals/arrays:
    static func buildEither(first: [String]) -> [String] { first }
    static func buildEither(second: [String]) -> [String] { second }
    static func buildArray(_ components: [[String]]) -> [String] { components.flatMap { $0 } }
}

// DSL entry function using the builder
func lines(@StringListBuilder _ content: () -> [String]) -> [String] {
    content()
}

// Usage: create an array of strings with a block
let list = lines {
    "Hello"
    "Swift"
    "Builders"
}
print(list)

Condicionais em construtores

Com buildEither, if/else funciona dentro do bloco. O construtor decide qual ramo contribui.

let showExtra = true
let conditional = lines {
    "Base"
    if showExtra {
        "Extra"
    } else {
        "Hidden"
    }
}
print(conditional)  // ["Base","Extra"]

Laços em construtores

buildArray reúne resultados de laços (for/map), para que partes repetidas possam ser emitidas naturalmente.

let items = ["a","b","c"]
let looped = lines {
    for x in items { x.uppercased() } // contributes ["A","B","C"]
}
print(looped)

Construtor de valor único

Os construtores podem produzir um valor único. Aqui, unimos partes em uma cadeia de caracteres, ainda usando condicionais.

@resultBuilder
struct TextBuilder {
    static func buildBlock(_ parts: String...) -> String {
        parts.joined(separator: " ")
    }
    static func buildEither(first: String) -> String { first }
    static func buildEither(second: String) -> String { second }
    static func buildArray(_ components: [String]) -> String {
        components.joined(separator: " ")
    }
}

func text(@TextBuilder _ content: () -> String) -> String { content() }

// Compose a small sentence with conditions
let loggedIn = false
let sentence = text {
    "[INFO]"
    "Welcome,"
    if loggedIn { "user!" } else { "guest." }
}
print(sentence) // "[INFO] Welcome, guest."

Dicas de projeto

Dicas:

  • Mantenha as DSLs mínimas e focadas.
  • Forneça uma única função de entrada clara, anotada com seu construtor.
  • Ofereça suporte apenas ao necessário: buildBlock, buildEither, buildArray.
  • Documente quais instruções são permitidas dentro do bloco.

Finalidade do construtor de resultados

Verificação rápida: Qual é o principal benefício de um construtor de resultados?

Recapitulação

Recapitulação: Defina métodos @resultBuilder para combinar partes, exponha uma pequena API de entrada e componha blocos legíveis com suporte a if/for.

Perguntas Frequentes

A aula “Criando mini-DSLs com construtores de resultados” é grátis?

Sim — o texto completo de “Criando mini-DSLs com construtores de resultados” é 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 3 aulas no total.

O que vou aprender em “Criando mini-DSLs com construtores de resultados”?

Crie uma pequena DSL usando @resultBuilder : defina funções construtoras, componha blocos e ofereça suporte a condicionais e loops para uma construção legível. 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 1 de 3.

Quanto tempo leva a aula “Criando mini-DSLs com construtores de resultados”?

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. Criando mini-DSLs com construtores de resultados
  2. APIs com escopo e padrões de legibilidade
  3. Exemplos práticos sem frameworks de interface
← Voltar para Swift Academy