lastOrNull
이터러블의 마지막 원소를 반환합니다. 비어 있으면 null입니다.
강의
lastOrNull은 이터러블 전체를 훑으면서 가장 마지막에 본
값을 돌려줍니다 — 아무것도 못 봤다면 null입니다.
lastOrNull은 Dart다운 이름이고
(Iterable.lastOrNull과 짝을 이룹니다), fxdart는 FxTS식
표기인 last도 함께 받아들입니다 — 둘은 같은 연산자입니다.
head와 달리 지름길은 없습니다. 지연 이터러블은 끝까지
끌어당겨 보기 전에는 어디서 끝나는지 알 수 없으므로,
lastOrNull은 모든 원소를 소비해야 합니다. 상류 파이프라인이
지연으로 구성돼 있더라도 O(n)인 이유입니다.
동기 체인에서 주의하세요: Fx는
Iterable을 확장하므로 fx(iterable).lastOrNull은
Dart가 물려준 Iterable.lastOrNull 게터로
해석됩니다(괄호 없음) — 이 게터는 실제로 null 안전해서 빈
이터러블에서 null을 반환합니다. 함정은 바로 옆에 있는 "OrNull"이 없는
.last 게터입니다. fx(<int>[]).last는
null을 반환하는 대신 StateError를 던집니다.
.lastOrNull이나 최상위 lastOrNull(iterable)
함수를 쓰세요. 비동기 체인에서 .lastOrNull()은
메서드라 괄호가 붙습니다.
데모 1 · 기본, 그리고 체인 게터의 함정
데모 2 · 비동기 — 여기서는 체인 형태가 null 안전합니다
FxAsync는 자체 .lastOrNull() 메서드를 정의하므로, 비동기 체인에서는 위의 게터 함정이 적용되지 않습니다:
직접 해 보기
연습: lastOrNull을 써서 마지막 로그 줄을 출력하고, 로그가 하나도 없으면 'no logs yet'을 출력해 보세요.