อนุประโยค where ในฟังก์ชัน
เพิ่มข้อจำกัดอย่างละเอียดให้ฟังก์ชันแบบทั่วไป
อนุประโยค where ในฟังก์ชัน เป็นบทเรียน Swift Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Swift Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน
ก้าวข้ามข้อจำกัดพื้นฐาน
ข้อจำกัดอย่าง <T: Collection> อธิบายตัว T เอง แต่บางครั้งคุณจำเป็นต้องจำกัดชนิดข้อมูลที่เกี่ยวข้องของ T เช่น Element ซึ่งเป็นหน้าที่ของอนุประโยค where
func sumInts<C: Collection>(_ c: C) -> Int where C.Element == Int {
c.reduce(0, +)
}
print(sumInts([1, 2, 3]))ข้อกำหนดชนิดข้อมูลเดียวกัน
where C.Element == Int กำหนดให้องค์ประกอบของคอลเลกชันเป็น Int โดยตรง จึงสามารถทำงานที่เฉพาะกับจำนวนเต็มได้
func describe<C: Collection>(_ c: C) -> String where C.Element == Int {
"Sum is " + String(c.reduce(0, +))
}
print(describe(Set([1, 2, 3])))ข้อกำหนดด้านโปรโตคอลขององค์ประกอบ
คุณสามารถกำหนดให้องค์ประกอบสอดคล้องกับโปรโตคอล แทนการกำหนดให้เป็นชนิดข้อมูลใดชนิดข้อมูลหนึ่งโดยเฉพาะ ซึ่งมีความยืดหยุ่นมากกว่า
func joinAll<C: Collection>(_ c: C) -> String
where C.Element: CustomStringConvertible {
c.map { $0.description }.joined(separator: ", ")
}
print(joinAll([1, 2, 3]))where อยู่หลังลายเซ็น
อนุประโยค where อยู่ระหว่างชนิดค่าที่ส่งกลับกับเนื้อฟังก์ชัน ข้อจำกัดภายใน <> และอนุประโยค where จะทำงานร่วมกัน
func maxElement<C: Collection>(_ c: C) -> C.Element?
where C.Element: Comparable {
c.max()
}
print(maxElement([4, 9, 2])!)การเชื่อมโยงพารามิเตอร์ชนิดข้อมูลสองตัว
อนุประโยค where สามารถเชื่อมโยงชนิดขององค์ประกอบจากเจเนอริกสองแบบที่แตกต่างกันด้วย == ได้
func combine<A: Collection, B: Collection>(_ a: A, _ b: B) -> [A.Element]
where A.Element == B.Element {
Array(a) + Array(b)
}
print(combine([1, 2], Set([3])))เงื่อนไข where หลายรายการ
ระบุข้อกำหนดหลายรายการโดยคั่นด้วยจุลภาค เพื่อแสดงข้อจำกัดแบบผสม
func report<C: Collection>(_ c: C)
where C.Element: Comparable, C.Element: CustomStringConvertible {
if let m = c.max() { print("max:", m.description) }
}
report([5, 1, 9])การจำกัดชนิดข้อมูลที่เกี่ยวข้องแบบซ้อน
คุณสามารถเข้าถึงชนิดข้อมูลที่อยู่ลึกลงไปได้ เช่น กำหนดชนิดขององค์ประกอบขององค์ประกอบ เมื่อทำงานกับคอลเลกชัน nested
func flatten<C: Collection>(_ c: C) -> [Int]
where C.Element: Collection, C.Element.Element == Int {
c.flatMap { Array($0) }
}
print(flatten([[1, 2], [3]]))where กับองค์ประกอบ Equatable
การกำหนดให้องค์ประกอบเป็น Equatable ช่วยให้คุณค้นหาภายในคอลเลกชัน generic ได้
func indexOf<C: Collection>(_ x: C.Element, in c: C) -> C.Index?
where C.Element: Equatable {
c.firstIndex(of: x)
}
if let i = indexOf(2, in: [1, 2, 3]) { print("found") }เมธอด generic ที่ใช้ where
เมธอดภายในชนิดข้อมูล generic ก็ใช้ where ได้เช่นกัน โดยมักใช้เพื่อเพิ่มการทำงานเฉพาะสำหรับชนิดขององค์ประกอบบางประเภท
struct Wrap<T> {
let items: [T]
func total() -> Int where T == Int { items.reduce(0, +) }
}
print(Wrap(items: [1, 2, 3]).total())ประโยชน์ด้านความอ่านง่าย
ข้อจำกัดที่ซับซ้อนอ่านได้ชัดเจนกว่าเมื่อเขียนในอนุประโยค where แทนการอัดรวมไว้ในวงเล็บมุม โดยเฉพาะเมื่อมีเงื่อนไขของชนิดข้อมูลที่เกี่ยวข้องหลายรายการ
func first<C: Collection>(_ c: C) -> String
where C.Element: CustomStringConvertible {
c.first.map { $0.description } ?? "empty"
}
print(first([10, 20]))where ในไลบรารีมาตรฐาน
เมธอดอย่าง joined() บนลำดับของลำดับใช้อนุประโยค where ภายใน เพื่อแสดงข้อกำหนดของเมธอดอย่างแม่นยำ
let nested = [[1, 2], [3, 4]]
print(Array(nested.joined()))ตรวจสอบความเข้าใจ
ทดสอบความเข้าใจของคุณเกี่ยวกับอนุประโยค where ในฟังก์ชัน
ทบทวน
อนุประโยค where ช่วยให้คุณจำกัดชนิดข้อมูลที่เกี่ยวข้องของ generic ได้ เช่น กำหนดให้องค์ประกอบเป็นชนิดข้อมูลเฉพาะ (== Int) สอดคล้องกับโปรโตคอล (: Comparable) เชื่อมโยงองค์ประกอบของพารามิเตอร์สองตัว หรือเข้าถึงชนิดข้อมูลที่เกี่ยวข้องแบบซ้อน อนุประโยคนี้อยู่หลังลายเซ็นและช่วยให้ข้อจำกัดที่ซับซ้อนอ่านได้ง่าย
คำถามที่พบบ่อย
บทเรียน “อนุประโยค where ในฟังก์ชัน” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “อนุประโยค where ในฟังก์ชัน” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Swift Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “อนุประโยค where ในฟังก์ชัน”
เพิ่มข้อจำกัดอย่างละเอียดให้ฟังก์ชันแบบทั่วไป คุณปฏิบัติ Swift Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Swift Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Swift Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “อนุประโยค where ในฟังก์ชัน” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Swift Academy นี้ได้ไหม
ได้ บทเรียน Swift Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ข้อจำกัดของพารามิเตอร์ชนิด
- อนุประโยค where ในฟังก์ชัน
- การจำกัดชนิดที่เกี่ยวข้อง
- ซับสคริปต์และส่วนขยายแบบทั่วไป