คุณสมบัติ lazy
เลื่อนการแปลงออกไปจนกว่าจะจำเป็น
คุณสมบัติ lazy เป็นบทเรียน Swift Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Swift Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน
ทำงานทันทีตามค่าเริ่มต้น
เมธอดคอลเลกชันมาตรฐานเป็นแบบประเมินทันที: map, filter และอื่น ๆ จะทำงานทันทีและสร้างอาร์เรย์ใหม่ทั้งหมด แม้ว่าคุณจะอ่านเพียงสมาชิกตัวแรกก็ตาม
งานแบบประเมินทันทีเกิดขึ้นเดี๋ยวนี้
โค้ดนี้สร้างอาร์เรย์ที่ผ่านการแปลงทั้งหมดไว้ล่วงหน้า:
let nums = [1, 2, 3, 4, 5]
let doubled = nums.map { $0 * 2 } // whole array built now
print(doubled.first!) // 2คุณสมบัติ lazy
คอลเลกชันทุกชนิดจะแสดงมุมมอง .lazy การดำเนินการบนมุมมองแบบเลื่อนการประเมินจะถูกเลื่อนออกไป โดยจะยังไม่ทำงานจนกว่าคุณจะวนซ้ำจริงหรือขอสมาชิกที่เจาะจง
การสร้างมุมมองแบบเลื่อนการประเมิน
เพียงเติม .lazy ไว้หน้าสายการทำงาน:
let nums = [1, 2, 3, 4, 5]
let view = nums.lazy.map { $0 * 2 }
// nothing computed yet
print(Array(view)) // [2, 4, 6, 8, 10]หลักฐานการทำงานแบบเลื่อนการประเมิน
ผลข้างเคียงแสดงให้เห็นว่าคลอเชอร์จะทำงานเมื่อมีการร้องขอเท่านั้น:
let nums = [1, 2, 3]
let lazyMapped = nums.lazy.map { n -> Int in
print("transforming \(n)")
return n * 2
}
print("created view")
print(lazyMapped.first!) // prints "transforming 1" then 2lazy คืนค่าชนิดที่แตกต่างกัน
สายการทำงานแบบเลื่อนการประเมินเป็นตัวห่อหุ้มขนาดเล็ก ไม่ใช่ Array:
let nums = [1, 2, 3]
let view = nums.lazy.map { $0 + 1 }
print(type(of: view).self != [Int].self) // true -- it is a LazyMapSequenceการสร้างผลลัพธ์จริงจากมุมมองแบบเลื่อนการประเมิน
แปลงกลับเป็นอาร์เรย์ที่เป็นรูปธรรมด้วย Array(...) เมื่อต้องการจัดเก็บหรือคืนค่า:
let nums = [1, 2, 3]
let result: [Int] = Array(nums.lazy.map { $0 * 10 })
print(result) // [10, 20, 30]lazy กับ first(where:)
การเลื่อนการประเมินให้ประโยชน์เมื่อคุณหยุดก่อนถึงจุดสิ้นสุด ระบบจะประมวลผลสมาชิกเท่าที่จำเป็นต่อการค้นหารายการที่ตรงกัน:
let nums = [1, 2, 3, 4, 5, 6]
let firstBig = nums.lazy.map { $0 * $0 }.first { $0 > 10 }
print(firstBig!) // 16 (stops at 4*4)lazy กับช่วงค่า
ช่วงค่าก็ใช้ร่วมกับ lazy ได้เช่นกัน ซึ่งมีประโยชน์สำหรับลำดับขนาดใหญ่หรือเสมือนไม่มีที่สิ้นสุด:
let firstThree = (1...1000).lazy.map { $0 * $0 }.prefix(3)
print(Array(firstThree)) // [1, 4, 9]เมื่อมีการประเมินมุมมองซ้ำ
มุมมองแบบเลื่อนการประเมินจะคำนวณใหม่ทุกครั้งที่คุณวนซ้ำ โดยจะไม่จัดเก็บผลลัพธ์ไว้ การวนซ้ำสองครั้งจึงทำให้การแปลงทำงานสองครั้ง:
var calls = 0
let view = [1, 2].lazy.map { (n: Int) -> Int in calls += 1; return n }
_ = Array(view)
_ = Array(view)
print(calls) // 4เมื่อควรเลือกใช้ lazy
เพิ่ม .lazy เมื่อคุณมีสายการทำงานยาว ๆ แต่ใช้ผลลัพธ์เพียงบางส่วน เช่น รายการแรก คำนำหน้า หรือการลดรูปเพียงครั้งเดียว สำหรับอาร์เรย์ขนาดเล็กที่ใช้ข้อมูลทั้งหมด การประเมินทันทีจะเรียบง่ายกว่า
let nums = Array(1...100)
let result = nums.lazy.filter { $0 % 7 == 0 }.first
print(result!) // 7ตรวจสอบความเข้าใจอย่างรวดเร็ว
คุณสมบัติ .lazy เปลี่ยนแปลงการทำงานของ map และ filter อย่างไร
สรุป
คุณได้เรียนรู้พื้นฐานของการเลื่อนการประเมินแล้ว:
- เมธอดคอลเลกชันมาตรฐานจะประเมินทันทีและสร้างอาร์เรย์โดยทันที
.lazyคืนค่ามุมมองที่เลื่อนการประเมิน (ชนิดลำดับพิเศษ)- งานจะเกิดขึ้นเมื่อคุณวนซ้ำหรือขอสมาชิกเท่านั้น
- สร้างผลลัพธ์จริงด้วย
Array(...)และมุมมองจะทำงานซ้ำในการวนซ้ำแต่ละครั้ง
ถัดไป: สายการทำงานของ lazy map และ filter
เรียนรู้ Swift ด้วย AI tutor — ฟรี
เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป
- คอร์ส
- 122
- บทเรียน
- 409
คำถามที่พบบ่อย
บทเรียน “คุณสมบัติ lazy” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “คุณสมบัติ lazy” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Swift Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “คุณสมบัติ lazy”
เลื่อนการแปลงออกไปจนกว่าจะจำเป็น คุณปฏิบัติ Swift Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Swift Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Swift Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “คุณสมบัติ lazy” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Swift Academy นี้ได้ไหม
ได้ บทเรียน Swift Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- คุณสมบัติ lazy
- map และ filter แบบ lazy
- ข้อแลกเปลี่ยนระหว่าง lazy กับ eager
- การสร้างลำดับแบบ lazy ที่กำหนดเอง