0Pricing
Swift Academy · Aula

Exemplos práticos sem frameworks de interface

Escreva pequenas DSLs úteis sem interface: arquivos de configuração, construtores simples de consultas, emissores de texto/Markdown e pipelines de validação com @resultBuilder .

Exemplos práticos sem frameworks de interface é uma aula grátis de Swift Academy no CoddyKit. Esta é a aula 3 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.

Construtores de resultados fora da interface

Você pode criar DSLs úteis para muitas tarefas além da interface do usuário. Vamos criar construtores de config, consulta, texto e validação. Mantenha cada um pequeno e focado.

Construtor de config

Um construtor de config coleta tuplas simples em um dicionário. Os locais de chamada são organizados e fáceis de examinar.

@resultBuilder
struct ConfigBuilder {
    static func buildBlock(_ parts: (String,String)...) -> [String:String] {
        var dict: [String:String] = [:]
        for (k,v) in parts { dict[k] = v }
        return dict
    }
}
func config(@ConfigBuilder _ body: () -> [String:String]) -> [String:String] { body() }

// Use it:
let cfg = config {
    ("ENV", "debug")
    ("API_URL", "https://api.example.com")
    ("RETRY", "3")
}
print(cfg["API_URL"] ?? "missing")

Construtor de consultas

Um construtor de consultas une cláusulas com AND. Oferecemos suporte a if/else e laços por meio de ganchos do construtor.

struct Where { let clauses: [String] }
@resultBuilder
struct WhereBuilder {
    static func buildBlock(_ parts: String...) -> Where { Where(clauses: parts) }
    static func buildArray(_ parts: [String]) -> Where { Where(clauses: parts) }
    static func buildEither(first: Where) -> Where { first }
    static func buildEither(second: Where) -> Where { second }
}
func whereClauses(@WhereBuilder _ body: () -> Where) -> Where { body() }

func select(_ table: String, where w: Where) -> String {
    let filter = w.clauses.isEmpty ? "" : " WHERE " + w.clauses.joined(separator: " AND ")
    return "SELECT * FROM \(table)\(filter);"
}

// Use:
let isProd = false
let q = select("users", where: whereClauses {
    "age > 18"
    if isProd { "status = 'active'" } else { "status <> 'deleted'" }
})
print(q)

Construtor de texto/Markdown

Um construtor de texto emite uma única String. Auxiliares como h2 e bullet mantêm o bloco legível.

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

func h2(_ s: String) -> String { "## " + s }
func bullet(_ s: String) -> String { "- " + s }

let doc = md {
    h2("Release Notes")
    bullet("Faster build")
    bullet("Smaller binary")
}
print(doc)

Construtor de validação

Colete regras de validação e execute-as como um fluxo. O bloco permanece declarativo; a execução ocorre posteriormente.

struct ValidationResult { let ok: Bool; let messages: [String] }

typealias Rule = (String) -> String?   // nil = OK; otherwise error message

@resultBuilder
struct RulesBuilder {
    static func buildBlock(_ parts: Rule...) -> [Rule] { parts }
    static func buildArray(_ parts: [[Rule]]) -> [Rule] { parts.flatMap { $0 } }
}
func rules(@RulesBuilder _ body: () -> [Rule]) -> [Rule] { body() }

func validate(_ input: String, with rules: [Rule]) -> ValidationResult {
    var msgs: [String] = []
    for r in rules { if let m = r(input) { msgs.append(m) } }
    return ValidationResult(ok: msgs.isEmpty, messages: msgs)
}

// Use:
let rs = rules {
    { $0.isEmpty ? "Must not be empty" : nil }
    { $0.count < 3 ? "Too short" : nil }
}
let out = validate("hi", with: rs)
print(out.ok, out.messages)

Dicas de projeto

Dicas:

  • Comece com buildBlock; adicione suporte a ramificações e coleções apenas quando necessário.
  • Mantenha os tipos emitidos simples: cadeias de caracteres, matrizes, pequenas estruturas.
  • Forneça uma função de entrada por DSL (por exemplo, config, md).
  • Documente as instruções permitidas e as regras de escape.

Caso de uso de construtor fora da interface

Verificação rápida: Escolha um uso sólido de um construtor fora da interface:

Recapitulação

Recapitulação: Os construtores de resultados são excelentes para entradas estruturadas — configurações, consultas, texto e validação. Mantenha-os mínimos, legíveis e com escopo bem definido.

Perguntas Frequentes

A aula “Exemplos práticos sem frameworks de interface” é grátis?

Sim — o texto completo de “Exemplos práticos sem frameworks de interface” é 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 “Exemplos práticos sem frameworks de interface”?

Escreva pequenas DSLs úteis sem interface: arquivos de configuração, construtores simples de consultas, emissores de texto/Markdown e pipelines de validação com @resultBuilder . 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 3 de 3.

Quanto tempo leva a aula “Exemplos práticos sem frameworks de interface”?

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