inazuma code :繰り返し処理
for
式 は配列・オブジェクト・レンジ(範囲)を順に走査し、各要素に対して処理を行った結果を配列として返します。
if
と同様に「文」ではなく「式」なので、評価結果をそのまま変数に代入したり、メソッドチェインに渡せます。
基本構文(配列)
let result = for (let value in values) {
// 各要素ごとの処理
value * 2;
};
values
は配列・オブジェクト・レンジ(範囲)です。- ブロック
{ ... }
内で 最後に評価された式の結果 が、その要素に対する返り値になります。 - 全要素の返り値が配列として返されます。
値とインデックス
(index, value)
の形で宣言すると、インデックスと値の両方を参照できます。
let result = for (let (index, value) in values) {
`${index}: ${value}`;
};
オブジェクトの走査
オブジェクトを走査する場合も (key, value)
の形で宣言します。
let user = { name: "Alice", age: 18 };
let result = for (let (key, value) in user) {
key + ": " + value;
};
// ["name: Alice", "age: 18"]
レンジ(範囲)
A..B
の形で数値の連続範囲を生成できます。
// 昇順
for (let i in 1..5) {
i * 2;
}; // [2, 4, 6, 8]
// 降順
for (let i in 5..1) {
i * 2;
}; // [10, 8, 6, 4]
ネスト
for
式は入れ子にできます。
let result = for (let i in 1..4) {
for (let j in 1..3) {
i + j;
}
};
// [[2, 3], [3, 4], [4, 5]]
メソッドチェイン
for
式の返り値は配列なので、そのままメソッドチェインが可能です。
let result = for (let i in 0..10) {
i->is_even() ? i : 0;
}->filter(x => x > 5);
// [6, 8]
まとめ
- 式 として評価されます。
- 対象は配列・オブジェクト・レンジです。
- 結果は配列・オブジェクトとして返ります。
- ブロック内で 最後に評価された式の結果 がその要素の返り値です。
(index, value)
/(key, value)
のように複数変数で要素情報を取得できます。- ネストに対応しています。
- 評価結果に対して、そのままメソッドチェインが可能です。