new-generator
Version:
This new Generator is general purpose iterable generator.
196 lines (134 loc) • 5.32 kB
Markdown
まだ翻訳できていません。
[English version](README.md#readme)
[new-generator](https://www.npmjs.org/package/new-generator) - new Generator class for ES2015 (ES6 Harmony) generators and iteration
=========================
この **new Generator** は汎用の繰り返し可能なジェネレータです。
ジェネレータは `next()` メソッドを持つ繰り返し可能なジェネレータプロトコル準拠のオブジェクトです。
繰り返し可能なジェネレータプロトコルは `value` プロパティに値を持つオブジェクトを
`next` メソッドを呼び出すたびに返します。
繰り返しの終わりには `done` プロパティに `true` を持つオブジェクトを返します。
この `Generator` は `Array` の様に `filter`, `map` や `reduce` メソッドがあります。
**new-generator** は ES2015 (ES6 Harmony) の機能は直接使用していませんが、
`ES2015 (ES6) ジェネレータやイテレータ` と組み合わせると便利な様に設計された
制御フローライブラリです。
インストレーション
------------
[](https://nodei.co/npm/new-generator/)
[](https://nodei.co/npm/new-generator/)
```bash
$ npm install new-generator
```
[![npm][npm-new-generator.png]][npm-new-generator]
使い方
-----
The following example requires `node v4/v5`
# new Generator を使った例
```js
var Generator = require('new-generator');
// new Generator : ES2015 (ES6) iteration 機能を使った例
for (var value of new Generator([11, 22, 33])
console.log(value);
// -> 11, 22, 33
// new Generator : ES2015 (ES6) の機能を使わない例
for (var gtor = new Generator([11, 22, 33]),
n = gtor.next(); !n.done; n = gtor.next())
console.log(n.value);
// -> 11, 22, 33
// 組合せ
console.log(
new Generator(1, 20, true) // -> 1, 2, 3, ... 19, 20
.filter(function (x) { return x % 2 === 0; }) // -> 2, 4, 6, ... 18, 20
.map(function (x) { return x / 2; }) // -> 1, 2, 3, ... 9, 10
.reduce(function (x, y) { return x + y; })); // => 1 + 2 + ... + 10 = 55
```
# Generator クラス
## new Generator(generator)
```js
var Generator = require('new-generator');
// Number
var g1 = new Generator(3); // -> 0, 1, 2
// String
var g2 = new Generator('abc'); // -> 'a', 'b', 'c'
// Array
var g3 = new Generator([1, 2, 3]); // -> 1, 2, 3
// Arguments
(function() {
var g4 = new Generator(arguments); // -> 10, 20, 30
})(10, 20, 30);
// 他の Generator
var g5 = new Generator(g1);
// ES2015 (ES6) ジェネレータ
function gtorEx() {
for (var i = 0; i < 3; ++i)
yield i;
}
// -> 0, 1, 2
var g6 = new Generator(gtorEx); // called with no arguments by constructor
var g7 = new Generator(gtorEx()); // normal generator
```
## new Generator([from,] to, [step=1,] [boundary=false])
```js
var Generator = require('new-generator');
// without boundary value (exclude last value, start from 0)
var g1 = new Generator(3); // -> 0, 1, 2
var g2 = new Generator(0, 3); // -> 0, 1, 2
var g3 = new Generator(0, 5, 2); // -> 0, 2, 4
var g4 = new Generator(3, 0); // -> 3, 2, 1
var g5 = new Generator(5, 0, -2); // -> 5, 3, 1
// with boundary value (include last value, start from 1)
var g6 = new Generator(3, true); // -> 1, 2, 3
var g7 = new Generator(1, 3, true); // -> 1, 2, 3
var g8 = new Generator(1, 5, 2, true); // -> 1, 3, 5
var g9 = new Generator(3, 1, true); // -> 3, 2, 1
var g10 = new Generator(5, 1, -2, true); // -> 5, 3, 1
// `new` を省略する事も出来る。
var g11 = Generator(3);
```
# filter または map タイプのメソッド
## Generator#filter(fn(value), this)
```js
var Generator = require('new-generator');
console.log(new Generator(10).filter(function (x) {
return x % 2 === 0;
}).toArray());
// -> [0, 2, 4, 6, 8]
```
## Generator#map(fn(value), this)
```js
var Generator = require('new-generator');
console.log(new Generator(5).map(function (x) {
return x * 3;
}).toArray());
// -> [0, 3, 6, 9, 12]
```
# reduce タイプのメソッド
## Generator#reduce(fn(cumulative, value), initial, this)
```js
var Generator = require('new-generator');
console.log(new Generator(10).reduce(function (x, y) {
return x + y;
}));
// -> 55
```
## Generator#toArray()
```js
var Generator = require('new-generator');
console.log(new Generator(5).toArray());
// -> [0, 1, 2, 3, 4]
```
# Generator クラスメソッド
## Generator.range([from,] to, [step=1,] [boundary=false])
new Generator
## Generator.count(start, [step=1])
new Generator
## Generator.chain(...generators)
new Generator
# etc
License
-------
MIT
Git Repository
--------------
LightSpeedWorks/[new-generator](https://github.com/LightSpeedWorks/new-generator#readme)
[npm-new-generator]: https://nodei.co/npm/new-generator
[npm-new-generator.png]: https://nodei.co/npm/new-generator.png