firstOrNull

이터러블의 첫 원소를 반환하며, 비어 있으면 null을 반환합니다.

A? firstOrNull<A>(Iterable<A> iterable) Future<A?> firstOrNullAsync<A>(FxAsyncIterable<A> iterable) T? Fx.firstOrNull // sync chain: inherited Iterable getter, no parens Future<T?> FxAsync.firstOrNull() // async chain method A? head<A>(Iterable<A> iterable) // FxTS alias Future<T?> FxEvents<T>.head() / .firstOrNull() // terminal (events)

강의

firstOrNull은 이터러블의 맨 앞에서 원소를 정확히 하나만 끌어와 돌려줍니다 — 원소가 없다면 null입니다. firstOrNull은 Dart다운 이름이고 (Iterable.firstOrNull과 짝을 이룹니다), fxdart는 FxTS식 표기인 head도 함께 받아들입니다 — 둘은 같은 연산자입니다. FxTS의 head는 빈 배열에 undefined를 반환하지만 Dart에는 undefined가 없기 때문에, API의 이 영역에서 "없을 수도 있는" 결과는 전부 null로 수렴합니다. 따라서 자연스러운 사용 방식은 firstOrNull(list) ?? fallback입니다.

firstOrNullmoveNext()를 한 번만 호출하므로, 아주 크거나 심지어 무한한 지연 파이프라인 위에서 호출해도 비용이 거의 들지 않습니다. 필요한 원소 하나를 넘어서는 상류 작업은 전혀 실행되지 않습니다.

data-first 형태(firstOrNull(iterable))와 FxAsyncIterable을 위한 비동기 형태로 제공됩니다. 동기 체인에서 fx(iterable).firstOrNullIterable에서 물려받은 게터라 괄호가 없고, 비동기 체인에서는 메서드 .firstOrNull()입니다.

데모 1 · 기본

빈 값이 들어가면 null이 나옵니다 — 예외도, orElse 콜백도 필요 없습니다.

데모 2 · 지연 평가와 비동기 단락

아래의 100만 개짜리 범위에서도 끌어당겨지는 원소는 단 하나뿐입니다. 비동기 예제에서는 체인이 첫 번째 delay(...)만 기다리고 두 번째는 거들떠보지도 않습니다.

직접 해 보기

연습: firstOrNull을 사용해 첫 번째 점수를 출력하되, 리스트가 비어 있으면 0이 출력되게 해 보세요.

관련 항목: last — 반대쪽 끝에서 같은 일을 합니다 · nth — 임의의 인덱스를 가져옵니다 · find — 술어에 처음 부합하는 원소를 찾습니다 · isEmpty — 값 기반으로 비어 있는지 확인합니다