การสร้าง DSL ขนาดเล็กด้วย result builders
สร้าง DSL ขนาดเล็กโดยใช้ @resultBuilder : กำหนดฟังก์ชันสร้าง ประกอบบล็อก และรองรับเงื่อนไข/ลูปเพื่อให้การสร้างอ่านเข้าใจง่าย
การสร้าง 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การสร้าง DSL ขนาดเล็กด้วย result builders
- API แบบกำหนดขอบเขตและรูปแบบเพื่อการอ่านง่าย
- ตัวอย่างเชิงปฏิบัติโดยไม่ใช้เฟรมเวิร์ก UI