indexWhere

Devuelve el índice del primer elemento para el que el predicado es cierto, o -1.

int indexWhere<A>(bool Function(A a) f, Iterable<A> iterable) Future<int> indexWhereAsync<A>(FutureOr<bool> Function(A a) f, FxAsyncIterable<A> iterable) int Fx.indexWhere(bool Function(T a) f) // chain Future<int> FxAsync.indexWhere(FutureOr<bool> Function(T a) f) // chain int findIndex<A>(bool Function(A a) f, Iterable<A> iterable) // FxTS alias

Lección

indexWhere es el nombre idiomático en Dart (cf. List.indexWhere); fxdart también acepta la grafía findIndex de FxTS: son el mismo operador. Es el hermano de find: el mismo recorrido perezoso y con cortocircuito, pero informa de dónde estaba la coincidencia en vez de la coincidencia en sí. Fíjate en el valor centinela distinto para «no encontrado» — aquí es -1, un int, igual que el Array.prototype.findIndex de JavaScript. Es un contraste deliberado con head/find/nth, que todos usan null: un índice tiene un valor «imposible» natural, así que FxDart mantiene aquí la convención de FxTS en lugar de inventarse un tipo de retorno int?.

Por dentro empareja cada elemento con su índice (mediante zipWithIndex) y se detiene en el primero que pasa f.

Demo 1 · Fundamentos

Demo 2 · Cortocircuito & asíncrono

Pruébalo tú

Ejercicio: usa indexWhere para encontrar la posición de bob en la cola, o -1.

Relacionado: find — la misma búsqueda, pero devuelve el valor · includes — solo «¿está o no?» · nth — el inverso: entra un índice, sale un valor · zipWithIndex — lo que lo hace funcionar por dentro