2007-06-21

怠け者へのmochikitノススメ

javascriptライブラリMochiKitというのをご存知だろうか?

私はこのライブラリを採用して非常に開発が楽になったことから諸君にもおすすめをしたいのでサワリだけ紹介したいと思う。

parial 引数をいちいち指定するのが面倒な人用。


配列を受け取り、それぞれを1加算した配列を返す処理を見てみよう

var arr = [1,2,3,4,5];
var v = map(
  function(x){return x+1},
  arr);
v -> [2,3,4,5,6]

となる。

複数回同じ処理を別の配列に適応する場合は

var arr1 = [1,2,3,4,5];
var arr2 = [2,4,6,8,10];
var fx = function(x){return x+1};
var v1 = map(fx,arr1);
var v2 = map(fx,arr2);
v1 -> [2,3,4,5,6]
v2 -> [3,5,7,9,11]

とできる。しかしこれを書くのが面倒な怠惰な人々のためにpartialが用意されている。

var arr = [1,2,3,4,5];
var fx = partial(map,function(x){return x+1});
var v1 = fx(arr1);
var v2 = fx(arr2);
v1 -> [2,3,4,5,6]
v2 -> [3,5,7,9,11]

とできる。partialは関数の第一引数から順に値を指定した関数を作る関数だ。

この場合はmap関数の一つ目の値をfunction(x){return x+1}に指定した関数fxに束縛される。

もう少々一般化して配列を受け取り、それぞれをn加算した配列を返す処理を考えてみよう。

var arr = [1,2,3,4,5];
var n = 10;
var add = function(n,x){return x+n};
var fx = partial(map,partial(add,n));
var v1 = fx(arr);
n = 1;
var v2 = fx(arr);
v1 -> [11,12,13,14,15]
v2 -> [11,12,13,14,15]

ここでv1とv2の値が等しい理由はちょっと考えてもらえば解ると思う。

もちろんaddという名前を考えるのが面倒な人は

var n = 10;
var fx = partial(map,partial(function(n,x){return x+n},n));

と書いても問題ない。

compose function(N){return F(A(N))}と書くのが面倒な人へ

では、配列を受け取り、それぞれを値をn加算したあとm倍した配列を返す処理をみてみよう。

既にn加算する処理は一度出てきているからそれを利用する。

var arr = [1,2,3,4,5];
var n = 10;
var m = 2;
var add = function(n,x){return x+n};
var mul = function(n,x){return x*n};
var addMul = compose(partial(mul,m),partial(add,n));
var fx = partial(map,addMul);
var v = fx(arr);
v -> [22, 24, 26, 28, 30]

compose(f1, f2, ..., fN)はf1(f2(arguments))という評価をする関数をかえす。

つまりaddMul(n)の場合はpartial(mul,m)(partial(add,n)(N))と等価なのだ。

もちろん

var arr = [1,2,3,4,5];
var n = 10;
var m = 2;
var fx = partial(map,
            compose(partial(function(n,x){return x*n},m),
                    partial(function(n,x){return x+n},n)));
var v = fx(arr);

とかいてもよい。ただし名前を考えることの労力と、可読性を天秤にかける必要があるかもしれない。

ちなみに私は addMulを別の場所で使わない限り後者で書くことが多い。

以上のことに興味持った怠惰貴方

http://mochikit.com/

にいってみてはどうだろうか。

http://anond.hatelabo.jp/20070620200618#tbと同じ増田

  • 9割ぐらいはハッシュ 何がハッシュなのか javascriptで存在するほとんどのオブジェクトの実体はハッシュだよ。 var arr = [0,1,2,3]; とかをみると配列(人によってはリスト)に見えると思う。で...

    • Object と Array をごっちゃにするのは、初学を助けても、そこから先が難しそうだけれども。 それ以上に Closer は無いな。Closure ね。『閉じるもの』ではなく、『中に包まれたもの』だから...

    • [日刊増田]2007-06-20 の増田日記合計 438 件から 昨日の増田はもちろんこれ、オレはエホバの証人。こんなエントリがでてくるのも増田のおかげ。嘘も多いかも知れないけれど、増田だから...

    • 9割ぐらいはハッシュ 何がハッシュなのか javascriptで存在するほとんどのオブジェクトの実体はハッシュ((ここで言うハッシュは伝統的な意味。連想配列のこと。))だよ。 var arr = [0,1,2,3]; と...

    • http://b.hatena.ne.jp/entrylist?url=http%3A%2F%2Fanond.hatelabo.jp%2F&threshold=400 以下、ブクマ数昇順。 人月計算とExcelとスーツの世界より (417 users) http://anond.hatelabo.jp/20070831005830 ソープへ行けと彼女...

    • javascriptを理解するためのたった2つの大切なこと、javascriptを理解するためのたった2つの大切なこと:改(改があるなんて知らなかった)を読んで感じたところ。 束縛、レキシカルスコープ...

    • 私はあなたのことが好きだ。陳腐な表現しかなくてすまないが、愛している。 たとえばアーキテクトに特化されたその思考や言動を、あなたの温かい家庭の味のする料理を、それらを生...

    • ランク タイトル ブクマ数 日付 カテゴリ 1 急がばまわれ式・堅実で一番効率的な英語の勉強法 7900users 2009/10/26 22:02 学び 2 20年来のつらさがほぼ消えたことにつ...

    • ランク タイトル ブクマ数 日付 カテゴリ 1 急がばまわれ式・堅実で一番効率的な英語の勉強法 7900users 2009/10/26 22:02 学び 2 20年来のつらさがほぼ消えたことにつ...

    • これ2007年の増田か。 最新の内容で更新して欲しいですね。 javascriptを理解するためのたった2つの大切なこと https://anond.hatelabo.jp/20070620200618 javascriptを理解するためのたった2つの大切な...

記事への反応(ブックマークコメント)

ログイン ユーザー登録
ようこそ ゲスト さん