Water Sunlight

軽量プログラミングの文法 - JavaScript/Python

ユーザ用ツール

サイト用ツール


js:iteration_protocols

文書の過去の版を表示しています。


JavaScript 反復処理プロトコル

y2sunlight 2021-06-14

どんな言語でもコレクション内の各アイテムに対する反復処理は必須の機能です。JavaScriptでも言語コアに反復処理の機能が直接的に取り入れられています。この機能によって、for...of ループの標準的な動作とカスタマイズの仕組みを提供しています。

ES2015では反復処理の為に新しい仕組みとして、反復処理プロトコルが追加されました。このプロトコルには、次の2種類が含まれます。

  • 反復可能(iterable)プロトコル
  • 反復子(iterator)プロトコル

これらのプロトコルを使って、イテレーターオブジェクト及びジェネレーターオブジェクトが定義されています。


イテレーター

イテレーターとは、コレクション内のオブジェクトを列挙する機能を持ったオブジェクトの事です。ES2015*2015で導入された for…of 構文は、このイテレーターを使用した構文糖(Syntax Sugar)です。

以下にイテレーターを使わないレトロな for 文と、イテレーターを使用した for 文を比べてみます。

let students = ['sato', 'suzuki', 'takahashi'];

for(let i = 0; i < students.length; i++) {
    console.log(students[i]);
}

let students = ['sato', 'suzuki', 'takahashi'];

for(let student of students) {
    console.log(student);
}

また、イテレーターオブジェクトを明示的に使用したコードは次の様になります。

let students = ['sato', 'suzuki', 'takahashi'];

// イテレーターオブジェクトの取得
let it = students[Symbol.iterator]();

let obj = it.next();
while(!obj.done()) {
    console.log(obj);
    obj = it.next();
}

Symbol.iteratorはコレクションからイテレーターを取得する為の特別なキーです。詳しくはこちらを参照して下さい。


ジェネレーター

TODO:
js/iteration_protocols.1625461413.txt.gz · 最終更新: 2021/07/05 14:03 by tanaka