by shigemk2

当面は技術的なことしか書かない

JavaScript Ninjaの極意 4 メモ化

自分が計算した値を覚えておくように関数を構築する。

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Listing 4.9</title>
    <script type="text/javascript" src="../scripts/assert.js"></script>
    <link href="../styles/assert.css" rel="stylesheet" type="text/css">
  </head>

  <body>
    <script type="text/javascript">

      function isPrime(value) {
        if (!isPrime.anwers) isPrime.answers = {};                   //#1
        if (isPrime.answers[value] != null) {                        //#2 キャッシュした値をチェックする
          return isPrime.answers[value];                             //#2
        }                                                            //#2
        var prime = value != 1; // 1は決して素数にならない
        for (var i = 2; i < value; i++) {
          if (value % i == 0) {
            prime = false;
            break;
          }
        }
        return isPrime.answers[value] = prime;                       //#3 // メモ化、計算した値を保存する
      }

      assert(isPrime(5), "5は素数!" );                              //#4
      assert(isPrime.answers[5], "答えはキャッシュされた!" );       //#4
      assert(isPrime.answers[5], "答えはキャッシュされた!" );       //#4
      assert(isPrime(5), "5は素数!" );                              //#4


    </script>
  </body>
</html>