Functional
Array: map は呼び出した時点で評価される
Array の map は Stream と異なり、結果を要求する前でも直ちにコールバックを実行します。
SourceeagerArrays.ts
Node.js 22
export function mapImmediately(values: readonly number[], observe: (value: number) => void): number[] {
return values.map((value) => {
observe(value);
return value * 2;
});
}TesteagerArrays.test.ts
Node.js 22
import assert from "node:assert/strict";
import test from "node:test";
import { mapImmediately } from "../../src/array/eagerArrays.js";
test("Arrayのmapは直ちにコールバックを評価する", () => {
let calls = 0;
const doubled = mapImmediately([1, 2], () => { calls += 1; });
assert.equal(calls, 2);
assert.deepEqual(doubled, [2, 4]);
});01Assertion
このテストで確認できること
- map の直後に各要素のコールバックが実行される
- 結果配列を使わなくても評価済みである
遅延評価が必要なら generator や async iterator を選びます。Array メソッドに副作用を置く場合は実行タイミングを意識します。
OBSERVED RESULT
expected: after map calls → 2
actual: 2