Sapporo.js-2011.03.05を開催しました
この本もついに5章に入りました。
今回は蝶々本に載ってないところでも議論が盛り上がったので、話題に出たコードを貼り付けてみようと思います。
まずは4.15 メモ化から
用意されていたmemoizer関数に、キャッシュの破棄機能をつけてみよう、という話。
var memoizer = function(memo, fundamental) { var shell = function(n) { var result = memo[n]; if (typeof result !== 'number') { result = fundamental(shell, n); memo[n] = result; } return result; } // リセットメソッド shell.reset = function(ini) { memo = ini; } return shell; } var fibonacci = memoizer([0, 1], function(fib, n) { return fib(n - 1) + fib(n - 2); }); // 引数で与えたオブジェクトでリセット fibonacci.reset([0, 1]);
また、本当に記憶したキャッシュを利用しているのかの確認のために、カウンターを設定してみます。
// 一回の関数呼び出しで計算が実行された回数 var t = 0; // 実行された総回数 var total = 0; var fibonacci = memoizer([0, 1], function(fib, n) { t += 1; return fib(n - 1) + fib(n - 2); }); // 降順で表示させているので、初回以降はすべて計算が行われていないことを確認する for (var i = 10; i >= 0; i -= 1 ) { t = 0; // リセット機能の確認用 // fibonacci.reset([0, 1]); document.writeln('// ' + i + ': ' + fibonacci(i)); total += t; document.writeln(t); } document.writeln(total);
次は5章、継承なのですが、プロトタイプについてのおさらいです。
@bad_at_math さん、thxです!
// 一般的なプロトタイプ継承の例 var Child = function() {}; Child.prototype; // [Object object] Child.prototype.hoge = "xxx"; var child = new Child(); child.hoge; // "hoge" // オブジェクトからプロトタイプを設定する例(Mozillaのみ) var c = {}, p = {}; p.__proto__ = {hoge: "ooo"}; c.__proto__ = p.__proto__ c.hoge; // "ooo"
また、間違えやすいのですが、以下の例はプロトタイプを設定できていない例です。
(ただ、"prototype"というプロパティが設定されるだけです。)
var c = {}, p = {foo: "bar"}; c.prototype = p; c.hoge; // undefined
また、当日は、 @bad_at_math さんがLTをしてくださいました。
話の内容もすばらしかったのですが、何よりそれを即興でお話してくださったのがすごかったです。
また、当日の様子を @aloelight さんがまとめてくださっています。
次回開催は未定ですが、ご興味ある方はぜひいらしてください:-)
次回はp.56から始める予定です。
JavaScript: The Good Parts ―「良いパーツ」によるベストプラクティス
- 作者: Douglas Crockford,水野貴明
- 出版社/メーカー: オライリージャパン
- 発売日: 2008/12/22
- メディア: 大型本
- 購入: 93人 クリック: 1,615回
- この商品を含むブログ (180件) を見る