체크리스트에 번호 매기기
요구사항
설치 6단계를 번호 붙은 체크리스트로 바꾸세요 — 1. Unbox
the sensor kit처럼, 한 단계에 한 줄, 번호는 1부터 시작합니다.
데이터는 아래 코드에 있으며, 두 버전 모두 예상 출력 아래에
표시된 줄들을 출력해야 합니다.
예상 출력
1. Unbox the sensor kit 2. Charge the base station 3. Pair the remote 4. Mount the wall bracket 5. Run the self-test 6. Register the warranty
나란히 보기
RxDart
FxDart
차이가 나는 이유
코어 Stream에도 RxDart에도 인덱스 있는 map은
없습니다. RxDart가 제공하는 가장 가까운 것은 scan인데,
그 누산기가 마침 세 번째 인자로 인덱스를 받습니다 — 그래서 위의 rx
표기는 fold에 올라타 단계 번호를 매깁니다: 발명해야 하는
시드('')와 곧바로 무시해 버리는 누적값이 등장하죠.
대안들도 종류로 보면 더 깨끗하지 않습니다 — 매퍼가 캡처하는 가변
카운터라든가, Rx.range와의 zip이라든가 — 어떤 경로든
인덱스를 바깥에서 밀반입합니다. 인덱스를 실어 나르는 연산자가 없기
때문입니다. 동작은 하지만, 여전히 우회처럼 읽힙니다.
FxDart는 그것을 직접 말합니다: zipWithIndex가 각 요소를
그 위치와 짝짓고, 평범한 map이 그 쌍을 포맷합니다.
이것은 push 대 pull의 격차라기보다 어휘의 격차입니다 — 인덱스 짝짓기
연산자는 어느 모델에서든 쉽게 표현할 수 있는데, Rx가 그것을 기르지
않았을 뿐입니다 — 하지만 각 패널의 독자는 그 차이를 느낍니다: 한쪽은
"요소와 그 인덱스"라고 진술하고, 다른 쪽은 그것을 누산기의 남는
매개변수에 부호화합니다. 판정: FxDart.
벤치마크
N = 100
시간 무승부
최대 메모리 무승부
N = 1,000,000
시간 FxDart 승
최대 메모리 무승부
막대는 사이드별로 새 프로세스에서 반복 측정한 중앙값입니다(작은 N은 타이머 해상도를 위해 배치 처리). 두 사이드가 서로 5% 이내이거나 — 사람이 지각할 수 없는 차이인 0.6ms 이내이면 — 무승부로 칩니다. 상대 차이가 근소한 경우는 최대 5회까지 다시 측정합니다. 앱에서는 어느 막대가 짧든 몇 밀리초 이하의 차이는 사용자에게 보이지 않습니다. 메모리는 프로세스 최대 RSS입니다. Dart VM과 데이터셋은 양쪽이 동일하므로, 두 막대의 차이가 곧 파이프라인 자체가 붙들고 있는 양입니다.