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
- Criando mini-DSLs com construtores de resultados
- APIs com escopo e padrões de legibilidade
- Exemplos práticos sem frameworks de interface