作成日 :

3-2.JavaScript における反復処理の構造と定義

プログラムにおける反復(イテレーション)とは、特定の条件が満たされるまで、あるいはデータ集合の全要素に対して、一連の命令を逐次実行する制御構造を指す。

繰り返し処理

for…of 文(反復可能オブジェクトの走査 実体参照型)

反復可能オブジェクト(Iterable objects)から値を順次取り出し、ループ変数に代入して処理を行う構造。配列と添字をベースとせず、ドット記法でプロパティに即アクセス可能

  • 定義:配列(Array)、文字列(String)、Map、Setなどの反復プロトコルを実装したオブジェクトに適用
  • 特性:async/await による非同期処理の逐次実行(直列処理)を完全にサポート
  • 用途:配列要素の参照および、要素が保持するプロパティへのアクセス
  • アクセス形式:item.property

Array.prototype.forEach()(配列専用の反復メソッド コールバック委託型)

配列インスタンスに備わった高階関数による反復処理

  • 定義:引数として与えられたコールバック関数を、配列の各要素に対して一度ずつ実行
  • 特性:命令的ではなく宣言的な記述を可能にするが、反復の途中で中断(break)することは不可能
  • 用途:配列全要素に対する一律の副作用の適用
  • アクセス形式:(item) => item.p

for…in 文(列挙可能プロパティの探索 プロパティ走査型)

オブジェクトの継承されたプロパティを含め、列挙可能なプロパティ名(キー)に対しての反復

  • 定義:オブジェクトの各プロパティ名(String型またはSymbol型)を抽出
  • 特性:プロパティの列挙順序は保証されない。配列に対して使用した場合、インデックスが文字列として返却されるため非推奨
  • 用途:オブジェクト内部の状態検査、または連想配列の走査
  • アクセス形式:obj[key]

for 文(初期値・条件式・増分による計数反復 索引経由型)

ループカウンタを用いた、最も基本的かつ汎用的な制御構造

  • 定義:for (初期化式; 条件式; 増分式) の形式をとり、条件式が偽(false)になるまで処理を継続
  • 特性:インデックスを任意に操作(増減の歩進、逆順走査等)できる高い制御能力を有する
  • 用途:複雑な添字操作を伴うアルゴリズムの構築
  • アクセス形式:arr[i].property

while / do…while 文(条件依存の反復 条件継続型)

指定された論理式の評価結果が真(true)である間、処理を繰り返す構造

  • 定義:前判定(while)または後判定(do...while)により、反復の継続を決定
  • 特性:反復回数が事前に定まっていない動的な処理に適する
  • 用途:状態監視、入力待機、リトライ処理
  • アクセス形式:変数

配列(Array)とオブジェクト(Object)

配列オブジェクト
要素要素(Element)プロパティ、属性(Property)
識別添字(Index)[0, 1, 2…]キー(Key){id, name, slug…}
アクセスarray[0](物理的指定)object.name(論理的指定)
記述[]{}