nonNulls

Filtra los null y, a la vez, estrecha el tipo del elemento de T? a T.

Iterable<A> nonNulls<A>(Iterable<A?> iterable) FxAsyncIterable<A> nonNullsAsync<A>(FxAsyncIterable<A?> iterable) Iterable<A> Iterable.nonNulls // inherited getter (no parens); sync chain only Iterable<A> compact<A>(Iterable<A?> iterable) // FxTS alias

Lección

nonNulls toma un Iterable<A?> y devuelve un Iterable<A> — cada null desaparece, y el verificador de tipos lo sabe: nada de lo que venga después necesita ya comprobar null. nonNulls es el nombre idiomático en Dart; fxdart también acepta la grafía compact de FxTS: son el mismo operador. El compact de FxTS descarta los seis valores falsy de JS (undefined, null, 0, '', NaN, false); Dart no tiene un concepto único de «falsy», así que el port solo elimina null — un comportamiento deliberadamente más estrecho y fácil de razonar.

Aparece constantemente después de pluck o de cualquier búsqueda que devuelva T?: nonNulls(pluck(key, records)) te da una lista limpia y no nullable en un solo paso.

En la cadena síncrona, .nonNulls es un getter heredado de Iterable — escríbelo sin paréntesis (fx(xs).nonNulls) y, como devuelve un Iterable<A> normal, envuélvelo en fx(...) para seguir encadenando. No hay getter asíncrono, así que en un pipeline asíncrono usa la función de nivel superior nonNullsAsync(...) (o su alias de FxTS compactAsync) y envuélvela con fxAsync(...).

Demo 1 · Fundamentos & estrechamiento de tipos

Demo 2 · Asíncrono, con concurrencia

Pruébalo tú

Ejercicio: usa nonNulls para descartar los null de answers.

Relacionado: pluck — una fuente habitual de valores nullable · reject — descarta según un predicado cualquiera · compactObject — el equivalente para Map · uniq — elimina duplicados