lastOrNull
Devuelve el último elemento de un iterable, o null si está vacío.
Lección
lastOrNull recorre el iterable entero y devuelve lo último que
vio — null si nunca vio nada. lastOrNull es el
nombre idiomático en Dart (refleja Iterable.lastOrNull);
fxdart también acepta la grafía de FxTS last — son el mismo
operador. A diferencia de head, aquí no hay atajo: como un
iterable perezoso no sabe dónde termina sin que se lo pregunten,
lastOrNull tiene que consumir todos los elementos, así que es
O(n) aunque el pipeline aguas arriba se haya construido de
forma perezosa.
Ojo en la cadena síncrona: Fx extiende
Iterable, así que fx(iterable).lastOrNull resuelve
al getter Iterable.lastOrNull heredado de Dart (sin
paréntesis), que sí es seguro frente a nulos y devuelve
null con un iterable vacío. La trampa es el getter vecino
.last (sin «OrNull»): fx(<int>[]).last lanza
StateError en lugar de devolver null. Recurre a
.lastOrNull, o a la función de nivel superior
lastOrNull(iterable). En la cadena asíncrona,
.lastOrNull() es un método — con paréntesis.
Demo 1 · Fundamentos y la trampa del getter en la cadena
Demo 2 · Async, donde la forma encadenada SÍ es segura frente a nulos
FxAsync define su propio método .lastOrNull(), así que en la cadena asíncrona la trampa del getter anterior no se aplica:
Pruébalo tú
Ejercicio: usa lastOrNull para que esto imprima la última línea del log, o 'no logs yet' cuando no haya ninguna.