firstWhereOrNull

Devuelve el primer elemento para el que el predicado es cierto, o null.

A? firstWhereOrNull<A>(bool Function(A a) f, Iterable<A> iterable) Future<A?> firstWhereOrNullAsync<A>(FutureOr<bool> Function(A a) f, FxAsyncIterable<A> iterable) T? Fx.firstWhereOrNull(bool Function(T a) f) // chain Future<T?> FxAsync.firstWhereOrNull(FutureOr<bool> Function(T a) f) // chain A? find<A>(bool Function(A a) f, Iterable<A> iterable) // FxTS alias

Lección

firstWhereOrNull es el nombre idiomático en Dart; fxdart también acepta la grafía find de FxTS: son el mismo operador. Es lo que resulta de fusionar head y filter — de hecho está implementado exactamente así: head(filter(f, iterable)). Esa fusión es la que lo hace perezoso y capaz de cortocircuitar: tira de los elementos de uno en uno, probando cada uno contra f, y se detiene en cuanto encuentra una coincidencia. Nada de lo que viene después llega a tocarse.

Igual que head, una búsqueda sin coincidencias devuelve null en lugar del undefined de FxTS. Está disponible en versión data-first, como variante asíncrona y como método tanto en la cadena síncrona como en la asíncrona.

Demo 1 · Fundamentos

Demo 2 · Cortocircuito & asíncrono

De un millón de elementos solo se comprueban 6:

Pruébalo tú

Ejercicio: usa firstWhereOrNull para obtener el primer artículo con qty > 0, o null.

Relacionado: findIndex — la misma búsqueda, pero devuelve una posición · filter — todas las coincidencias, no solo la primera · head — la pieza con la que se construye find · matches — un predicado ya hecho para comparar formas