some P (ชนิดผลลัพธ์แบบไม่เปิดเผย): ซ่อนชนิดรูปธรรม
ส่งคืน some P เพื่อซ่อนชนิดผลลัพธ์รูปธรรม พร้อมรับรองว่าชนิดนั้นสอดคล้องกับ P ผู้เรียกใช้จะได้ประสิทธิภาพจากชนิดแบบสถิต โดยไม่เปิดเผยรายละเอียดการทำงานภายใน
some P (ชนิดผลลัพธ์แบบไม่เปิดเผย): ซ่อนชนิดรูปธรรม เป็นบทเรียน Swift Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 3 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Swift Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Swift Academy มีบทเรียนทั้งหมด 3 บทเรียน
เหตุผลที่ใช้ประเภทผลลัพธ์แบบไม่เปิดเผยชนิด
ประเภทผลลัพธ์แบบไม่เปิดเผยชนิด ใช้ some P เพื่อซ่อนชนิดรูปธรรมไว้เบื้องหลังโปรโตคอล ชนิดรูปธรรมจะตายตัวสำหรับฟังก์ชันนั้น แต่ผู้เรียกจะมองเห็นเฉพาะส่วนติดต่อของโปรโตคอล
- ห่อหุ้มรายละเอียดโดยไม่สูญเสียประสิทธิภาพแบบคงที่
- เหมาะอย่างยิ่งสำหรับโรงงานสร้างค่าและส่วนติดต่อที่คล้าย DSL
โรงงานสร้างค่าแบบไม่เปิดเผยชนิดพื้นฐาน
makeUnitCircle() คืนค่าเป็น รูปร่างแบบไม่เปิดเผยชนิด ผู้เรียกสามารถเรียกใช้ area() ได้ แต่ไม่สามารถพึ่งพาชนิดรูปธรรมได้
protocol Shape {
func area() -> Double
}
struct Circle: Shape {
let r: Double
func area() -> Double { .pi * r * r }
}
struct Square: Shape {
let s: Double
func area() -> Double { s * s }
}
// Opaque factory: callers know it's a Shape, not which one
func makeUnitCircle() -> some Shape {
Circle(r: 1.0) // concrete type is hidden
}
let sh = makeUnitCircle()
print(String(format: "%.2f", sh.area())) // 3.14ตายตัวสำหรับแต่ละฟังก์ชัน
ชนิดที่ซ่อนอยู่จะ ตายตัวสำหรับแต่ละฟังก์ชัน ฟังก์ชันอีกตัวที่คืนค่า some Shape อาจซ่อนชนิดรูปธรรมที่ แตกต่างกัน ได้
// Each function using "some Shape" chooses one hidden concrete type.
// Within the same function, it must always be the same concrete type.
func makeSquare(side: Double) -> some Shape {
Square(s: side) // fixed to Square for this function
}
let a = makeUnitCircle()
let b = makeUnitCircle()
print(a.area() == b.area()) // true for two unit circles
let q = makeSquare(side: 2)
print(q.area()) // 4.0มีชนิดที่ซ่อนอยู่ได้เพียงชนิดเดียว
กฎ: ฟังก์ชันที่คืนผลลัพธ์แบบไม่เปิดเผยชนิดต้องคืนชนิดรูปธรรม เดียวกัน ในทุกเส้นทางการทำงาน แขนงต่างชนิดกัน → ข้อผิดพลาดขณะคอมไพล์
// ❌ This would NOT compile, because different branches return different concrete types:
// func makeShape(flag: Bool) -> some Shape {
// if flag {
// return Circle(r: 1)
// } else {
// return Square(s: 1) // error: underlying type must be the same
// }
// }
// Rule: an opaque-returning function must always produce the same concrete type.ชนิดผลลัพธ์แบบไม่เปิดเผยชนิดร่วมกับเจเนอริก
ผลลัพธ์แบบไม่เปิดเผยชนิดสามารถประกอบร่วมกับเจเนอริกได้ ผู้เรียกจะเห็นเป็น Shape ขณะที่คุณยังคงซ่อนการนำ Scaled<Circle> ไปใช้ไว้เป็นส่วนตัว
// A generic decorator that also conforms to Shape
struct Scaled<S: Shape>: Shape {
let base: S
let k: Double
func area() -> Double { base.area() * k * k }
}
// Factory still hides the concrete generic type
func makeScaledUnitCircle(k: Double) -> some Shape {
Scaled(base: Circle(r: 1.0), k: k)
}
let s1 = makeScaledUnitCircle(k: 2)
print(s1.area()) // 4 * πเมื่อใดควรเลือกชนิดแบบไม่เปิดเผย
ใช้ชนิดแบบไม่เปิดเผยเมื่อ:
- คุณต้องการ ซ่อนรายละเอียดการนำไปใช้ แต่ยังคงการตรวจชนิดแบบคงที่
- ส่วนติดต่อควรคืนมุมมองในรูปโปรโตคอล (เช่น
Shape) โดยไม่เปิดเผยชนิดรูปธรรม - คุณสร้างกระบวนการทำงานต่อเนื่อง/DSLที่เชื่อมต่อตัวสร้างหลายตัวโดยยังคงเป็นเจเนอริก
(ในบทเรียนถัดไป คุณจะเปรียบเทียบกับชนิดเอ็กซิสเทนเชียล)
คำจำกัดความของผลลัพธ์แบบไม่เปิดเผยชนิด
ตรวจสอบสั้น ๆ: some P รับประกันอะไร
ทบทวน
ทบทวน: ประเภทผลลัพธ์แบบไม่เปิดเผยชนิด (some P) ซ่อนชนิดรูปธรรมไว้ แต่ยังคงการเรียกใช้แบบคงที่ ชนิดพื้นฐานจะ ตายตัวสำหรับแต่ละฟังก์ชัน จึงเหมาะสำหรับส่วนติดต่อที่สะอาด รวดเร็ว และห่อหุ้มรายละเอียด
คำถามที่พบบ่อย
บทเรียน “some P (ชนิดผลลัพธ์แบบไม่เปิดเผย): ซ่อนชนิดรูปธรรม” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “some P (ชนิดผลลัพธ์แบบไม่เปิดเผย): ซ่อนชนิดรูปธรรม” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Swift Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Swift Academy มีบทเรียนทั้งหมด 3 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “some P (ชนิดผลลัพธ์แบบไม่เปิดเผย): ซ่อนชนิดรูปธรรม”
ส่งคืน some P เพื่อซ่อนชนิดผลลัพธ์รูปธรรม พร้อมรับรองว่าชนิดนั้นสอดคล้องกับ P ผู้เรียกใช้จะได้ประสิทธิภาพจากชนิดแบบสถิต โดยไม่เปิดเผยรายละเอียดการทำงานภายใน คุณปฏิบัติ Swift Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Swift Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Swift Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 3 บทเรียน
บทเรียน “some P (ชนิดผลลัพธ์แบบไม่เปิดเผย): ซ่อนชนิดรูปธรรม” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Swift Academy นี้ได้ไหม
ได้ บทเรียน Swift Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- some P (ชนิดผลลัพธ์แบบไม่เปิดเผย): ซ่อนชนิดรูปธรรม
- any P (ชนิดอัตถิภาวะ): ข้อแลกเปลี่ยนและการเรียกแบบพลวัต
- การเลือกระหว่าง some, any และเจเนอิกส์