Swift Academy · Lekcja

Tworzenie mini-DSL za pomocą result builders

Zbuduj mały DSL za pomocą @resultBuilder : zdefiniuj funkcje buildera, łącz bloki oraz obsługuj instrukcje warunkowe i pętle, aby konstrukcje były czytelne.

Lekcja 1 z 38 kroki

Tworzenie mini-DSL za pomocą result builders to bezpłatna lekcja Swift Academy na CoddyKit. To lekcja 1 z 3. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Swift Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Swift Academy zawiera 3 lekcji w sumie.

Dlaczego konstruktory wyników?

Cel: Przekształcanie czytelnych bloków w wartości za pomocą @resultBuilder. Definiuje się sposób łączenia elementów, a miejsce wywołania pozostaje czyste i deklaratywne.

Mały konstruktor

Deklarujemy buildBlock, aby łączyć elementy, i udostępniamy API (lines{}), które zwraca tablicę ciągów znaków z czytelnego bloku.

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

Warunki w konstruktorach

Dzięki buildEither instrukcje if/else działają wewnątrz bloku. Konstruktor decyduje, która gałąź wnosi wynik.

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

Pętle w konstruktorach

buildArray zbiera wyniki z pętli (for/map), dzięki czemu powtarzane elementy można naturalnie emitować.

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

Konstruktor pojedynczej wartości

Konstruktory mogą generować pojedynczą wartość. Tutaj łączymy części w jeden ciąg znaków, nadal używając warunków.

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

Wskazówki projektowe

Wskazówki:

  • Należy utrzymywać DSL-e w minimalnym zakresie i skupiać je na jednym celu.
  • Należy udostępnić jedną wyraźną funkcję wejściową oznaczoną właściwym konstruktorem wyników.
  • Należy obsługiwać tylko potrzebne elementy: buildBlock, buildEither, buildArray.
  • Należy udokumentować, jakie instrukcje są dozwolone wewnątrz bloku.

Cel konstruktora wyników

Szybkie sprawdzenie: Jaka jest główna korzyść z konstruktora wyników?

Podsumowanie

Podsumowanie: Należy zdefiniować metody konstruktora wyników, udostępnić niewielkie API wejściowe i tworzyć czytelne bloki z obsługą instrukcji if/for.

Bezpłatny start

Ucz się Swift dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
122
Lekcje
409

Często zadawane pytania

Czy lekcja „Tworzenie mini-DSL za pomocą result builders” jest bezpłatna?

Tak — pełny tekst „Tworzenie mini-DSL za pomocą result builders” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Swift Academy, przejdź na CoddyKit PRO. Kurs Swift Academy zawiera 3 lekcji w sumie.

Co nauczysz się w „Tworzenie mini-DSL za pomocą result builders”?

Zbuduj mały DSL za pomocą @resultBuilder : zdefiniuj funkcje buildera, łącz bloki oraz obsługuj instrukcje warunkowe i pętle, aby konstrukcje były czytelne. Ćwiczysz Swift Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Swift Academy?

Nie wymagamy żadnego doświadczenia. Swift Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 3.

Ile czasu zajmuje lekcja „Tworzenie mini-DSL za pomocą result builders”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Swift Academy?

Tak. Każda lekcja Swift Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Tworzenie mini-DSL za pomocą result builders
  2. Zakresowe API i wzorce czytelności
  3. Praktyczne przykłady bez frameworków interfejsu użytkownika
← Powrót do Swift Academy