Swift Academy · Oppitunti

Pienois-DSL-kielten rakentaminen result builderien avulla

Rakentakaa pieni DSL-kieli käyttämällä @resultBuilder -määritystä: määritelkää builder-funktiot, koostakaa lohkoja ja tukekaa ehtoja ja silmukoita selkeää rakentamista varten.

Oppitunti 1/38 vaihetta

Pienois-DSL-kielten rakentaminen result builderien avulla on ilmainen Swift Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/3. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Swift Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Swift Academy-kurssilla on yhteensä 3 oppituntia.

Miksi result builderit?

Tavoite: Muuttakaa helposti luettavat lohkot arvoiksi käyttämällä @resultBuilder-annotaatiota. Määrittelette, miten osat yhdistetään, ja kutsukohta pysyy selkeänä ja deklaratiivisena.

Pieni builderi

Määrittelemme buildBlock-metodin yhdistämään osat ja tarjoamme rajapinnan (lines{}), joka palauttaa merkkijonotaulukon selkeästä lohkosta.

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

Ehtolauseet buildereissä

buildEither-metodin avulla if/else toimii lohkon sisällä. Builderi päättää, kumpi haara tuottaa tuloksen.

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

Silmukat buildereissä

buildArray kerää silmukoiden (for/map) tulokset, joten toistuvat osat voidaan tuottaa luontevasti.

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

Yhden arvon builderi

Builderit voivat tuottaa yhden arvon. Tässä yhdistämme osat yhdeksi merkkijonoksi ja käytämme edelleen ehtolauseita.

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

Suunnitteluvinkkejä

Vinkkejä:

  • Pidätkää DSL:t pieninä ja tarkasti rajattuina.
  • Tarjotkaa yksi selkeä builderillä merkitty sisääntulofunktio.
  • Tukekaa vain tarvittavia ominaisuuksia: buildBlock, buildEither, buildArray.
  • Dokumentoikaa, mitkä lauseet ovat lohkossa sallittuja.

Result builderin tarkoitus

Pikatarkistus: Mikä on result builderin tärkein hyöty?

Kertaus

Kertaus: Määritelkää @resultBuilder-metodit osien yhdistämistä varten, tarjotkaa pieni aloitusrajapinta ja yhdistäkää helposti luettavia lohkoja, joissa toimivat if- ja for-rakenteet.

Aloita maksutta

Opi Swift tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
122
Oppitunnit
409

Usein kysytyt kysymykset

Onko oppitunti ”Pienois-DSL-kielten rakentaminen result builderien avulla” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Swift Academy-oppimispolun 3 oppituntia, myös oppitunnin “Pienois-DSL-kielten rakentaminen result builderien avulla”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Swift Academy-kurssilla on yhteensä 3 oppituntia.

Mitä opin oppitunnilla ”Pienois-DSL-kielten rakentaminen result builderien avulla”?

Rakentakaa pieni DSL-kieli käyttämällä @resultBuilder -määritystä: määritelkää builder-funktiot, koostakaa lohkoja ja tukekaa ehtoja ja silmukoita selkeää rakentamista varten. Harjoittelet Swift Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Swift Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Swift Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/3.

Kuinka kauan ”Pienois-DSL-kielten rakentaminen result builderien avulla”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Swift Academy-oppitunnilla?

Kyllä. Jokainen Swift Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Pienois-DSL-kielten rakentaminen result builderien avulla
  2. Rajatut API:t ja luettavuusmallit
  3. Käytännön esimerkkejä ilman käyttöliittymäkehyksiä
← Takaisin: Swift Academy