nonNulls

null을 걸러 내는 동시에 원소 타입을 T?에서 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

강의

nonNullsIterable<A?>를 받아 Iterable<A>를 반환합니다 — 모든 null이 제거되고, 타입 체커도 그 사실을 압니다. 하류에서는 더 이상 null 검사를 할 필요가 없습니다. nonNulls가 Dart다운 이름이고, fxdart는 FxTS식 표기인 compact도 함께 받습니다 — 같은 연산자입니다. FxTS의 compact는 JS의 falsy 값 여섯 가지(undefined, null, 0, '', NaN, false)를 모두 걸러 냅니다. Dart에는 "falsy"라는 단일 개념이 없으므로, 이 포팅에서는 null만 제거합니다 — 의도적으로 범위를 좁혀 동작을 예측하기 쉽게 만든 선택입니다.

pluck 뒤나 T?를 반환하는 조회 뒤에 자주 등장합니다. nonNulls(pluck(key, records)) 한 번이면 nullable이 아닌 깔끔한 리스트를 얻습니다.

동기 체인에서 .nonNullsIterable에서 물려받은 게터입니다 — 괄호 없이 쓰고 (fx(xs).nonNulls), 반환값이 평범한 Iterable<A>이므로 체이닝을 이어 가려면 fx(...)로 다시 감싸세요. 비동기 게터는 없으므로 비동기 파이프라인에서는 최상위 nonNullsAsync(...)(또는 FxTS 별칭인 compactAsync)를 쓰고 fxAsync(...)로 감싸면 됩니다.

데모 1 · 기본 사용법과 타입 좁히기

데모 2 · 비동기, 그리고 동시성

직접 해 보기

연습: nonNullsanswers에서 null을 제거해 보세요.

관련 항목: pluck — nullable 값이 자주 나오는 출처 · reject — 임의의 술어로 제거 · compactObject — Map 키 기준의 대응 함수 · uniq — 중복 제거