firstOrNull
Devuelve el primer elemento de un iterable, o null si está vacío.
Lección
firstOrNull toma exactamente un elemento del principio de un
iterable y te lo devuelve — o null si no hay ninguno.
firstOrNull es el nombre idiomático en Dart (refleja
Iterable.firstOrNull); fxdart también acepta la grafía de FxTS
head — son el mismo operador. El head de FxTS
devuelve undefined con un array vacío; Dart no tiene
undefined, así que en esta parte de la API todo resultado del
tipo «puede que no exista» se reduce a null. Por eso la forma
natural de consumirlo es firstOrNull(list) ?? fallback.
Como firstOrNull solo llama a moveNext() una vez,
invocarlo sobre un pipeline perezoso enorme — incluso infinito — no cuesta
nada: aguas arriba no se ejecuta nada más allá del único elemento que necesita.
Viene en forma data-first (firstOrNull(iterable)) y en forma
asíncrona para FxAsyncIterable. En la cadena síncrona,
fx(iterable).firstOrNull es el getter heredado de
Iterable — sin paréntesis; en la cadena asíncrona es un
método, .firstOrNull().
Demo 1 · Fundamentos
Entra vacío, sale null: sin excepciones y sin necesidad de una retrollamada orElse:
Demo 2 · Pereza y cortocircuito asíncrono
Del rango de un millón de elementos de abajo solo se extrae uno.
En el ejemplo asíncrono, la cadena espera el primer
delay(...) y ni siquiera llega a molestarse con el segundo:
Pruébalo tú
Ejercicio: usa firstOrNull para que esto imprima la primera puntuación, o
0 cuando la lista esté vacía.