Swift Academy · บทเรียน

คุณสมบัติ lazy

เลื่อนการแปลงออกไปจนกว่าจะจำเป็น

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

คุณสมบัติ 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 2

lazy คืนค่าชนิดที่แตกต่างกัน

สายการทำงานแบบเลื่อนการประเมินเป็นตัวห่อหุ้มขนาดเล็ก ไม่ใช่ 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

  1. คุณสมบัติ lazy
  2. map และ filter แบบ lazy
  3. ข้อแลกเปลี่ยนระหว่าง lazy กับ eager
  4. การสร้างลำดับแบบ lazy ที่กำหนดเอง
← กลับไปที่ Swift Academy