range

Una secuencia perezosa de enteros desde el inicio (incluido) hasta el final (excluido), con el paso que quieras.

Iterable<int> range(int start, [int? end, int step = 1])

Lección

range genera enteros bajo demanda, usando un generador sync*: no se reserva nada por adelantado. Llamado con un solo argumento, range(4) cuenta 0, 1, 2, 3 (es decir, desde 0 hasta start, sin incluirlo). Con dos, range(1, 4) cuenta 1, 2, 3. Un tercer argumento fija el paso, incluido un paso negativo para contar hacia atrás: por ejemplo, range(4, 1, -1) da 4, 3, 2.

Como es perezoso, crear range(1000000) resulta prácticamente gratis: el millón de enteros solo se produce cuando algo aguas abajo (normalmente .take(n)) tira realmente de ellos. Eso convierte a range en la fuente de referencia para demostrar la evaluación perezosa, y en un sustituto muy práctico siempre que necesites «las primeras N cosas» sin construir antes una colección real.

A diferencia del range de FxTS, que es un generador finito sobre números, este port mantiene el mismo contrato finito: aquí no hay una forma ilimitada o infinita (de eso se encarga cycle). Si quieres un contador sin fin, combina range con cycle y take.

Demo 1 · Contar hacia arriba, hacia abajo y con pasos

Demo 2 · La pereza dentro de una cadena

range(1000000) no produce nada por adelantado: solo los 4 elementos que pide take(4) pasan realmente por map:

Pruébalo tú

Ejercicio: construye los números pares del 2 al 10 incluido usando el argumento de paso de range.

Relacionado: repeat — un valor fijo repetido n veces · cycle — repite una secuencia entera para siempre · take — acota cuánto tiras de un range · fx — la cadena en la que range suele envolverse