LoginSignup
3
0

More than 3 years have passed since last update.

Javascriptのイテレーターについて

Posted at

JavaScript学んでいる際にイテレーターについて出てきたのですが、いまいちイテレーターがどんなものかがイメージしにくかったので、調べてアウトプットしていこうと思います。

イテレーターとは?

wikipediaさんから引用

イテレータ(英語: iterator)とは、プログラミング言語において配列やそれに類似する集合的データ構造(コレクションあるいはコンテナ)の各要素に対する繰り返し処理の抽象化である。

MDNさんから引用

JavaScript では、イテレーターはシーケンスおよび潜在的には終了時の戻り値を定義するオブジェクトです。

繰り返しの抽象化ということで、for文や、while文の元となっているものだと思います。
あんまりしっくりこないのですが、順々に処理をしていって、あるところまで到達したら終了するみたいな感じだと捉えました。

イテレーターの書き方

MDN イテレーターとジェネレーターを参考にしつつ、書き方をみてみると、

iter.js
function makeIterator() {
    let i = 0;
    const iterator = {
        next: function() {
            if(i > 5){
                return {
                    done: true,
                }
            }else{
                return {
                    done: false,
                    value: i++
                }
            }
        }
    }
    return iterator;
}

const iter = makeIterator();
console.log(iter.next()) // {done: false, value: 0}
console.log(iter.next()) // {done: false, value: 1}
console.log(iter.next()) // {done: false, value: 2}
console.log(iter.next()) // {done: false, value: 3}
console.log(iter.next()) // {done: false, value: 4}
console.log(iter.next()) // {done: false, value: 5}
console.log(iter.next()) // {done: true}
console.log(iter.next()) // {done: true}

というような具合。

  • イテレーターを作る関数(今回だとmakeIterator)があって、その中にイテレーターというオブジェクトを用意する
  • イテレーターはnextをという関数をもち、その関数はオブジェクトを返す。
  • そのオブジェクトの中にはdonevalueをもつ。
  • doneがfalseの時には更新処理をし、trueの時にはそれ以上の更新をしない(値を返さない)

こういったルールをもとに書かないとイテレーターにはならないらしい。

最後に

ちなみに、ジェネレーターというものを使えばもう少し楽にイテレーターを作れる。
イテレーターもジェネレーターも、反復可能オブジェクトの作成に利用される。

イテレーターがループ処理の基盤となるようなもので、普段は触れることがなかったが、だいぶ理解が深まったと思います。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0