Lazy.range

このエントリーをはてなブックマークに追加

Lazy.jsでシーケンスを生成する関数の一つ。返されるシーケンスはGeneratedSequence。初期値から終了値 手前 まで、指定されれば指定されたステップで加算された値が生成される。 異常な引数が渡された場合は空のシーケンスが返される。

Lazy.range(stop);
// stop: 終了値
// 0からstopまでの値が+1されながら生成される

Lazy.range(start, stop);
// start: 初期値
//  stop: 終了値
// startからstopまでが生成される。
// start < stopならステップは+1
// start > stopならステップは-1

Lazy.range(start, stop, step);
// start: 初期値
//  stop: 終了値
//  step: ステップ
// startからstopまで、stepだけ加算されながら生成される

実際の実装をソースから引っ張ってきました。内部的にはLazy.generateを使っているのがわかりますね。

Lazy.range = function range() {
  var start = arguments.length > 1 ? arguments[0] : 0,
  stop = arguments.length > 1 ? arguments[1] : arguments[0],
  step = arguments.length > 2 && arguments[2];

  if (step === false) {
    step = stop > start ? 1 : -1;
  }

  if (step === 0) {
    return Lazy([]);
  }

  return Lazy.generate(function(i) { return start + (step * i); })
    .take(Math.ceil((stop - start) / step));
};

JSFiddleで結果を確認してみましょう

IxJS関連関数
Ix.Enumerable.range

目次へ

Written on May 21, 2015
このエントリーをはてなブックマークに追加