Swift Academy · บทเรียน

การสร้าง DSL ขนาดเล็กด้วย result builders

สร้าง DSL ขนาดเล็กโดยใช้ @resultBuilder : กำหนดฟังก์ชันสร้าง ประกอบบล็อก และรองรับเงื่อนไข/ลูปเพื่อให้การสร้างอ่านเข้าใจง่าย

บทเรียน 1 จาก 38 ขั้นตอน

การสร้าง DSL ขนาดเล็กด้วย result builders เป็นบทเรียน Swift Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 3 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 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 เพื่อรวมชิ้นส่วนต่าง ๆ เปิดเผยส่วนติดต่อทางเข้าขนาดเล็ก และประกอบบล็อกที่อ่านง่ายพร้อมรองรับเงื่อนไข/การวนซ้ำ

เริ่มต้นได้ฟรี

เรียนรู้ Swift ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
122
บทเรียน
409

คำถามที่พบบ่อย

บทเรียน “การสร้าง DSL ขนาดเล็กด้วย result builders” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การสร้าง DSL ขนาดเล็กด้วย result builders” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Swift Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Swift Academy มีบทเรียนทั้งหมด 3 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การสร้าง DSL ขนาดเล็กด้วย result builders”

สร้าง DSL ขนาดเล็กโดยใช้ @resultBuilder : กำหนดฟังก์ชันสร้าง ประกอบบล็อก และรองรับเงื่อนไข/ลูปเพื่อให้การสร้างอ่านเข้าใจง่าย คุณปฏิบัติ Swift Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Swift Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Swift Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 3 บทเรียน

บทเรียน “การสร้าง DSL ขนาดเล็กด้วย result builders” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Swift Academy นี้ได้ไหม

ได้ บทเรียน Swift Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การสร้าง DSL ขนาดเล็กด้วย result builders
  2. API แบบกำหนดขอบเขตและรูปแบบเพื่อการอ่านง่าย
  3. ตัวอย่างเชิงปฏิบัติโดยไม่ใช้เฟรมเวิร์ก UI
← กลับไปที่ Swift Academy