nonNulls
null을 걸러 내는 동시에 원소 타입을 T?에서 T로 좁혀 줍니다.
강의
nonNulls는 Iterable<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이 아닌 깔끔한 리스트를 얻습니다.
동기 체인에서 .nonNulls는 Iterable에서
물려받은 게터입니다 — 괄호 없이 쓰고
(fx(xs).nonNulls), 반환값이 평범한
Iterable<A>이므로 체이닝을 이어 가려면
fx(...)로 다시 감싸세요. 비동기 게터는 없으므로 비동기
파이프라인에서는 최상위 nonNullsAsync(...)(또는 FxTS 별칭인
compactAsync)를 쓰고 fxAsync(...)로 감싸면 됩니다.
데모 1 · 기본 사용법과 타입 좁히기
데모 2 · 비동기, 그리고 동시성
직접 해 보기
연습: nonNulls로 answers에서 null을
제거해 보세요.
pluck — nullable 값이 자주 나오는 출처 ·
reject — 임의의 술어로 제거 ·
compactObject — Map 키 기준의 대응 함수 ·
uniq — 중복 제거