Home Reference Source

src/memoize.js

/**
 * 関数をメモ化します。
 *
 * @param {function} f - 関数
 *
 * @return {function} メモ化した関数
 */
export default function memoize(f) {
  const memo = new Map();

  return (...args) => {
    const argsString = args.toString();

    if (!memo.has(argsString)) {
      memo.set(argsString, f(...args));
    }

    return memo.get(argsString);

    // ECMAScriptではArrayの比較ができなくて(実は今日まで知らなかった)、今調べたらtoStringすればよいとWebに書いてあった。
    // というわけでこんなコードなんだけど、これで正しいの? ……正しくない気がする。
  };
}