0Pricing
Elixir & Phoenix: Scalable Backend Development · درس

التقييم الكسول باستخدام الوحدة Stream

عالج المجموعات الكبيرة أو اللانهائية بكفاءة باستخدام تدفقات Elixir، التي تحسب القيم كسولًا عند الطلب.

التقييم الكسول باستخدام الوحدة Stream درس مجاني في Elixir & Phoenix: Scalable Backend Development على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 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:

  • Enum is eager; Stream is lazy and composable
  • Streams compute only when consumed by an Enum function
  • They enable infinite sequences and constant-memory file processing
  • Prefer streams for large/multi-step pipelines, Enum for small data

الأسئلة الشائعة

هل درس «التقييم الكسول باستخدام الوحدة Stream» مجاني؟

نعم — نص درس «التقييم الكسول باستخدام الوحدة Stream» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Elixir & Phoenix: Scalable Backend Development، انتقل إلى CoddyKit PRO. تتضمن دورة Elixir & Phoenix: Scalable Backend Development 4 دروس في المجموع.

ماذا ستتعلم في «التقييم الكسول باستخدام الوحدة Stream»؟

عالج المجموعات الكبيرة أو اللانهائية بكفاءة باستخدام تدفقات Elixir، التي تحسب القيم كسولًا عند الطلب. تتمرن على Elixir & Phoenix: Scalable Backend Development مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 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 يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. الدوال والوحدات وPipelining
  2. التعامل مع المجموعات القابلة للتعداد
  3. الاستدعاء الذاتي والدوال عالية الرتبة
  4. التقييم الكسول باستخدام الوحدة Stream
← العودة إلى Elixir & Phoenix: Scalable Backend Development