การประเมินแบบขี้เกียจด้วยโมดูล Stream
ประมวลผลคอลเลกชันขนาดใหญ่หรือไม่มีที่สิ้นสุดอย่างมีประสิทธิภาพด้วยสตรีมของ Elixir ซึ่งคำนวณค่าเมื่อจำเป็นเท่านั้น
การประเมินแบบขี้เกียจด้วยโมดูล Stream เป็นบทเรียน Elixir & Phoenix: Scalable Backend Development ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Elixir & Phoenix: Scalable Backend Development และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Elixir & Phoenix: Scalable Backend Development มีบทเรียนทั้งหมด 4 บทเรียน
บางส่วนของบทเรียนนี้ยังไม่ได้รับการแปล และแสดงเป็นภาษาอังกฤษ
Eager vs Lazy
Enum is eager: each step builds a full intermediate list. Stream is lazy: it composes operations and computes only when needed.
The Cost of Eager Pipelines
Chaining several Enum calls walks the whole collection multiple times and allocates a list at each stage.
1..1_000_000
|> Enum.map(&(&1 * 2))
|> Enum.filter(&(rem(&1, 3) == 0))
|> Enum.take(5)
|> IO.inspect()Building a Stream
Swap Enum for Stream to defer work. Nothing runs until a consuming function is called.
stream =
1..1_000_000
|> Stream.map(&(&1 * 2))
|> Stream.filter(&(rem(&1, 3) == 0))
IO.inspect(stream)Forcing Evaluation
A stream stays inert until an Enum function (like take or to_list) pulls values through it.
result =
1..1_000_000
|> Stream.map(&(&1 * 2))
|> Enum.take(5)
IO.inspect(result)Why Streams Are Efficient
Lazy pipelines fuse the steps and stop as soon as enough elements are produced, avoiding huge intermediate lists.
Infinite Streams
Stream.iterate/2 creates endless sequences that are safe because evaluation is lazy.
Stream.iterate(0, &(&1 + 1))
|> Enum.take(5)
|> IO.inspect()Stream.cycle for Repetition
Stream.cycle repeats a finite list forever, useful for assigning rotating values.
Stream.cycle(["a", "b", "c"])
|> Enum.take(7)
|> IO.inspect()Generating with Stream.unfold
Stream.unfold/2 builds a stream from a state and a function returning the next value and new state.
Stream.unfold(1, fn n -> {n, n * 2} end)
|> Enum.take(5)
|> IO.inspect()Streaming Files Line by Line
File.stream!/1 reads a file lazily, one line at a time, so you can process huge files with constant memory.
# File.stream!("big.log")
# |> Stream.filter(&String.contains?(&1, "ERROR"))
# |> Enum.count()Stream.chunk_every
Group a stream into batches lazily, handy for paginating work without loading everything.
1..10
|> Stream.chunk_every(3)
|> Enum.to_list()
|> IO.inspect()When to Choose Stream
Use Stream for large datasets, multi-step pipelines, infinite sequences, or IO. Use Enum for small collections where simplicity wins.
Quick Check
Test your lazy evaluation knowledge.
Recap
You learned lazy evaluation:
Enumis eager;Streamis lazy and composable- Streams compute only when consumed by an
Enumfunction - They enable infinite sequences and constant-memory file processing
- Prefer streams for large/multi-step pipelines, Enum for small data
เรียนรู้ Elixir ด้วย AI tutor — ฟรี
เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป
- คอร์ส
- 12
- บทเรียน
- 48
คำถามที่พบบ่อย
บทเรียน “การประเมินแบบขี้เกียจด้วยโมดูล Stream” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การประเมินแบบขี้เกียจด้วยโมดูล Stream” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Elixir & Phoenix: Scalable Backend Development ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Elixir & Phoenix: Scalable Backend Development มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การประเมินแบบขี้เกียจด้วยโมดูล Stream”
ประมวลผลคอลเลกชันขนาดใหญ่หรือไม่มีที่สิ้นสุดอย่างมีประสิทธิภาพด้วยสตรีมของ Elixir ซึ่งคำนวณค่าเมื่อจำเป็นเท่านั้น คุณปฏิบัติ Elixir & Phoenix: Scalable Backend Development ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Elixir & Phoenix: Scalable Backend Development หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Elixir & Phoenix: Scalable Backend Development บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “การประเมินแบบขี้เกียจด้วยโมดูล Stream” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Elixir & Phoenix: Scalable Backend Development นี้ได้ไหม
ได้ บทเรียน Elixir & Phoenix: Scalable Backend Development ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ฟังก์ชัน โมดูล และการส่งต่อข้อมูล
- การทำงานกับคอลเลกชันที่แจกแจงได้
- การเรียกซ้ำและฟังก์ชันลำดับสูง
- การประเมินแบบขี้เกียจด้วยโมดูล Stream