Hatena::Groupjavascript

lnzntのJavaScript日記 このページをアンテナに追加 RSSフィード

2010年11月19日(金)

メモ化

| 11:22 | メモ化 - lnzntのJavaScript日記 を含むブックマーク はてなブックマーク - メモ化 - lnzntのJavaScript日記 メモ化 - lnzntのJavaScript日記 のブックマークコメント

メモ化とは前回の処理の結果をオブジェクトに記憶させておくテクニック。

以下はメモ化を一般化させた 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;
    };
    return shell;
};

// memoizer を使用した階乗計算の定義
var factorial = memoizer([1, 1], function (shell, n) {
    return n * shell(n - 1);
});

factorial(10);  // 3628800

Canvas API (その4) ピクセル操作

| 11:04 | Canvas API (その4) ピクセル操作 - lnzntのJavaScript日記 を含むブックマーク はてなブックマーク - Canvas API (その4) ピクセル操作 - lnzntのJavaScript日記 Canvas API (その4) ピクセル操作 - lnzntのJavaScript日記 のブックマークコメント

imagedata = ctx.getImageData(sx, sy, sw, sh); // ImageData を返す
imagedata.width;  // 幅
imagedata.height; // 高さ

pixels = imagedata.data;   // CanvasPixelArray (Array に似たオブジェクト) を返す
pixels.length;    // 要素数 (画素数 × 4)
i = 0;
pixels[i + 0];    // i番目画素の Red
pixels[i + 1];    // i番目画素の Green
pixels[i + 2];    // i番目画素の Blue
pixels[i + 3];    // i番目画素の Alpha

ctx.putImageData(imagedata, dx, dy);

参考リンク

参考書籍

Google API Expertが解説するHTML5ガイドブック

Google API Expertが解説するHTML5ガイドブック