理系公務員のプログラミング日記

【JS忍者】関数のメモ化について①

タグ:
JavaScript

この本難解で去年一度挫折してしまったんですが、少し知識も付いた思い再チャレンジ中。
でも相変わらず難しい。実は何も成長していないのでは?

コストの高い関数をメモ化する

P.79 4.3.2 自分をメモ化する関数 より

素数を判定するプログラムに過去に計算した内容を覚えさせる(キャッシュ)の機能を追加する。

function isPrime(value) { // キャッシュを作成する if (!isPrime.cache) isPrime.cache = {}; // キャッシュされた値をチェックする if (isPrime.answers[value] != null){ return isPrime.answers[value] } let prime = value != 1; for (let i = 2; i < value; i++){ if (value % i == 0){ prime = false; break; } } // 計算した値を保存する return isPrime.answers[value] = prime; }

関数にメモを追加して以前の計算結果をキャッシュすることができる。 これさえ定義しておけば他に特別な動作や初期化を必要としない。

これはDOM要素に対しても応用できる

// 略 function getElements(name){ if (!getElements.cache) getElements.cache = {}; return getElements.cache[name] = getElements.cache[name] || documents.getElementsByTagName(name); }