0Pricing
Elixir & Phoenix: Scalable Backend Development · Lección

Evaluación perezosa con el módulo Stream

Procese colecciones grandes o infinitas de forma eficiente mediante los streams de Elixir, que calculan los valores de manera perezosa y bajo demanda.

Evaluación perezosa con el módulo Stream es una lección gratuita de Elixir & Phoenix: Scalable Backend Development en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Elixir & Phoenix: Scalable Backend Development, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Elixir & Phoenix: Scalable Backend Development incluye 4 lecciones en total.

Partes de esta lección aún no han sido traducidas y se muestran en inglés.

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

Preguntas frecuentes

¿La lección «Evaluación perezosa con el módulo Stream» es gratis?

Sí — el texto completo de «Evaluación perezosa con el módulo Stream» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Elixir & Phoenix: Scalable Backend Development, actualiza a CoddyKit PRO. El curso de Elixir & Phoenix: Scalable Backend Development incluye 4 lecciones en total.

¿Qué aprenderé en «Evaluación perezosa con el módulo Stream»?

Procese colecciones grandes o infinitas de forma eficiente mediante los streams de Elixir, que calculan los valores de manera perezosa y bajo demanda. Practicas Elixir & Phoenix: Scalable Backend Development con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Elixir & Phoenix: Scalable Backend Development?

No se requiere experiencia previa. Elixir & Phoenix: Scalable Backend Development en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.

¿Cuánto tiempo toma la lección «Evaluación perezosa con el módulo Stream»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Elixir & Phoenix: Scalable Backend Development?

Sí. Cada lección de Elixir & Phoenix: Scalable Backend Development incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Funciones, módulos y encadenamiento con pipes
  2. Trabajo con colecciones enumerables
  3. Recursividad y funciones de orden superior
  4. Evaluación perezosa con el módulo Stream
← Volver a Elixir & Phoenix: Scalable Backend Development