0Pricing
Swift Academy · Lección

Crear mini-DSL con result builders

Cree un DSL pequeño con @resultBuilder : defina funciones del builder, componga bloques y admita condicionales/bucles para una construcción legible.

Crear mini-DSL con result builders es una lección gratuita de Swift Academy en CoddyKit. Esta es la lección 1 de 3. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Swift Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Swift Academy incluye 3 lecciones en total.

¿Por qué usar constructores de resultados?

Objetivo: convertir bloques legibles en valores mediante @resultBuilder. Usted define cómo se combinan los elementos; el sitio de llamada se mantiene limpio y declarativo.

Un constructor pequeño

Declaramos buildBlock para unir elementos y exponemos una API (lines{}) que devuelve un arreglo de cadenas a partir de un bloque limpio.

@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)

Condicionales en los constructores

Con buildEither, if/else funciona dentro del bloque. El constructor decide qué rama contribuye.

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

Bucles en los constructores

buildArray reúne los resultados de los bucles (for/map), de modo que las partes repetidas se puedan emitir de forma natural.

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

Constructor de un solo valor

Los constructores pueden producir un único valor. Aquí unimos las partes en una sola cadena, sin dejar de usar condicionales.

@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."

Consejos de diseño

Consejos:

  • Mantenga los DSL mínimos y enfocados.
  • Proporcione una única función de entrada clara, anotada con su constructor.
  • Admite solo lo que necesite: buildBlock, buildEither, buildArray.
  • Documente qué instrucciones se permiten dentro del bloque.

Propósito de los constructores de resultados

Comprobación rápida: ¿Cuál es la principal ventaja de un constructor de resultados?

Resumen

Resumen: Defina métodos de @resultBuilder para combinar partes, exponga una API de entrada pequeña y componga bloques legibles con compatibilidad para if/for.

Preguntas frecuentes

¿La lección «Crear mini-DSL con result builders» es gratis?

Sí — el texto completo de «Crear mini-DSL con result builders» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Swift Academy, actualiza a CoddyKit PRO. El curso de Swift Academy incluye 3 lecciones en total.

¿Qué aprenderé en «Crear mini-DSL con result builders»?

Cree un DSL pequeño con @resultBuilder : defina funciones del builder, componga bloques y admita condicionales/bucles para una construcción legible. Practicas Swift Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Swift Academy?

No se requiere experiencia previa. Swift Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 3.

¿Cuánto tiempo toma la lección «Crear mini-DSL con result builders»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Swift Academy?

Sí. Cada lección de Swift Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Crear mini-DSL con result builders
  2. API con ámbito y patrones de legibilidad
  3. Ejemplos prácticos sin frameworks de UI
← Volver a Swift Academy