*Async 명명 규칙
모든 지연 연산자와 집계 연산자에는 FxAsyncIterable에서 동작하는 짝이 있습니다 — 동작은 같고, 콜백만 비동기 친화적입니다.
강의
Dart에는 타입 없는 커링이 없기 때문에, FxDart는 하나의
map을 오버로드해서 data-first 위치의
Iterable과 FxAsyncIterable 양쪽에서
동작하게 만들 수 없습니다. 매개변수 타입이 충돌하기 때문입니다.
그래서 모든 지연 연산자와 집계 연산자는 최상위 함수로 두 가지
형태를 제공합니다. Iterable용의 평범한 이름, 그리고
콜백이 R 대신 FutureOr<R>를 반환하는
FxAsyncIterable용 *Async 짝입니다. 이미 몇 가지는
만나 보셨습니다. map/mapAsync,
filter/filterAsync,
toList/toListAsync,
reduce/reduceAsync, fold/foldAsync,
each/eachAsync, find/findAsync —
라이브러리의 사실상 모든 함수가 이 규칙을 따릅니다.
체인 형태에는 이런 구분이 필요 없습니다.
.toAsync()를 호출하거나 fxAsync/fxStream에서
시작하고 나면, 그 FxAsync 체인의 이후 메서드는 모두
원래 이름을 그대로 씁니다 — .mapAsync(...)가 아니라
.map(...)입니다. 수신자의 타입만으로 어느 쪽을 쓸지
Dart가 이미 알 수 있기 때문입니다. 접미사는 모호함을 없애야 하는
최상위 data-first 호출에만 존재합니다.
데모 1 · 짝지어 놓고 비교하기
FxAsyncIterable을 다루는 순간, data-first 호출에는 항상
Async 접미사가 필요합니다.
데모 2 · data-first 형태 vs. 체인 형태
.toAsync()가 수신자의 타입을 바꾸고 나면, 체인 형태는
동기 버전과 똑같이 읽힙니다 — 접미사가 없습니다.
직접 해 보기
연습: data-first map의 *Async 짝을 사용해
이 비동기 파이프라인의 모든 이름을 대문자로 바꿔 보세요.
toAsync — 비동기 파이프라인의 출발점 ·
Stream 브리지 — fromStream, fxStream, toStream ·
concurrent — 병렬 평가 ·
map — 동기 원본