Создание мини-DSL с помощью построителей результатов
Создайте небольшой DSL с помощью @resultBuilder : определите функции построителя, объединяйте блоки и поддерживайте условные конструкции и циклы для удобного чтения.
«Создание мини-DSL с помощью построителей результатов» — бесплатный урок Swift Academy на CoddyKit. Это урок 1 из 3. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Swift Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Swift Academy содержит 3 уроков всего.
Зачем нужны построители результатов?
Цель: превращать понятные блоки в значения с помощью @resultBuilder. Вы определяете, как объединяются элементы, а место вызова остаётся чистым и декларативным.
Небольшой построитель
Мы объявляем buildBlock, чтобы объединять элементы, и предоставляем программный интерфейс (lines{}), возвращающий массив строк из понятного блока.
@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)Условия в построителях
С помощью buildEither конструкция if/else работает внутри блока. Построитель решает, какая ветвь будет включена в результат.
let showExtra = true
let conditional = lines {
"Base"
if showExtra {
"Extra"
} else {
"Hidden"
}
}
print(conditional) // ["Base","Extra"]Циклы в построителях
buildArray собирает результаты циклов (for/map), поэтому повторяющиеся части можно естественным образом добавлять в результат.
let items = ["a","b","c"]
let looped = lines {
for x in items { x.uppercased() } // contributes ["A","B","C"]
}
print(looped)Построитель одного значения
Построители могут выдавать одно значение. Здесь мы объединяем части в одну строку, по-прежнему используя условные конструкции.
@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."Советы по проектированию
Советы:
- Делайте DSL минимальными и специализированными.
- Предоставляйте одну понятную входную функцию, аннотированную вашим построителем.
- Поддерживайте только необходимое:
buildBlock,buildEither,buildArray. - Документируйте, какие инструкции разрешены внутри блока.
Назначение построителя результата
Быстрая проверка: в чём главное преимущество построителя результата?
Итоги
Итоги: определяйте методы @resultBuilder для объединения частей, предоставляйте небольшой входной интерфейс и составляйте понятные блоки с поддержкой условных конструкций и циклов.
Часто задаваемые вопросы
Урок «Создание мини-DSL с помощью построителей результатов» бесплатный?
Да — полный текст урока «Создание мини-DSL с помощью построителей результатов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Swift Academy, подпишись на CoddyKit PRO. Курс Swift Academy содержит 3 уроков всего.
Чему я научусь в уроке «Создание мини-DSL с помощью построителей результатов»?
Создайте небольшой DSL с помощью @resultBuilder : определите функции построителя, объединяйте блоки и поддерживайте условные конструкции и циклы для удобного чтения. Ты практикуешь Swift Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Swift Academy?
Предыдущий опыт не требуется. Swift Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 3.
Сколько времени занимает урок «Создание мини-DSL с помощью построителей результатов»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Swift Academy?
Да. Каждый урок Swift Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Создание мини-DSL с помощью построителей результатов
- API с ограниченной областью действия и приёмы повышения читаемости
- Практические примеры без UI-фреймворков