range

시작값(포함)부터 끝값(미포함)까지 원하는 간격으로 나아가는 정수의 지연 시퀀스입니다.

Iterable<int> range(int start, [int? end, int step = 1])

강의

rangesync* 제너레이터를 사용해 필요할 때마다 정수를 만들어 냅니다 — 미리 할당해 두는 것은 없습니다. 인자를 하나만 주면 range(4)0, 1, 2, 3을 세고(즉 0부터 start 직전까지), 두 개를 주면 range(1, 4)1, 2, 3을 셉니다. 세 번째 인자는 간격을 정하는데, 음수 간격을 주면 거꾸로 셀 수도 있습니다. 예를 들어 range(4, 1, -1)4, 3, 2를 냅니다.

지연 평가되기 때문에 range(1000000)을 만드는 비용은 사실상 없습니다 — 백만 개의 정수는 하류(보통 .take(n))에서 실제로 끌어당길 때만 생성됩니다. 그래서 range는 지연 평가를 보여 줄 때 가장 먼저 꺼내 드는 소스이며, 실제 컬렉션을 먼저 만들지 않고도 "앞의 N개"가 필요할 때 쓰기 좋은 대체 수단입니다.

FxTS의 range도 숫자에 대한 유한 제너레이터인데, 이 포팅 역시 같은 계약을 유지합니다 — 여기에는 무한 형태가 없습니다(그건 cycle의 몫입니다). 끝없이 이어지는 카운터가 필요하다면 rangecycle, take와 함께 쓰세요.

데모 1 · 올라가기, 내려가기, 간격 두고 세기

데모 2 · 체인 속의 지연 평가

range(1000000)은 미리 아무것도 만들지 않습니다 — take(4)가 요구하는 원소 4개만 실제로 map을 거칩니다:

직접 해 보기

연습: range의 간격 인자를 써서 2부터 10까지(10 포함)의 짝수를 만들어 보세요.

관련 항목: repeat — 고정된 값을 n번 반복 · cycle — 시퀀스 전체를 무한히 반복 · take — 범위에서 얼마나 끌어올지 제한 · fx — range를 대개 감싸게 되는 체인