2011/07/31

Sapporo.js 2011-07-31 参加レポート #sapporojs

今日はSapporo.js 2011-07-31に参加してきましたので、そのレポートを。
次回も可能であれば参加したいです。

5.4 関数型

写経

    var mammal = function(spec) {
        var that = {};

        that.get_name = function () {
            return spec.name;
        };

        that.says = function() {
            return spec.saying || '';
        };

        return that;
    };

内部にプライベートなthatを用意してカプセル化を実現

    var dog = mammal({name:"Dog", saying: "Bow"});

    document.writeln(dog.get_name()); // Dog
    dog.name = "Cat";
    document.writeln(dog.get_name()); // Dog

引数が分かりづらいのでこうして見る

  • 型チェックの追加
  • specに必要なkeyを明示的にする

改善後

    var mammal = function(spec) {
        var that = {};

        if ( typeof spec === 'object' && spec ) {
        } else {
            throw "spec should be an object';
        }
        var name   = spec.name   || 'mammal';
        var saying = spec.saying || '';

        that.get_name = function() {
            return name;
        };

        that.says = function() {
            return saying;
        };

        return that;
    };

改善前のはspecを先に定義しておけば、nameを書き換えられる

    var dogSpec = { name: "Dog", saying: "Bow" };
    var mydog = mammal(dogSpec);
    console.log(mydog.get_name()); // Dog
    dogSpec.name = "Cat";
    console.log(mydog.get_name()); // Cat

改善後のように変数、関数を別定義にしておけばちゃんとカプセル化される


Q. 最初に出てきた引数myは必要なのか?

    var mammal = funciton (spec, my) {
        // 省略
    };

A. 本に使用例も出てきてないし、誰もいい使い方が思いつかないから必要なさそう


親の関数をoverrideする前に変数に入れておけばOK

    var coolcat = function(spec){
        var that = cat(spec),
            super_get_name = that.superior('get_name');

        that.get_name = function(n) {
            return 'like ' + super_get_name() + ' baby';
        };

        return that;
    };

    var myCoolCat = coolcat({name: "Bix"});
    console.log(myCoolCat.get_name());

P.63までやった。次回は 5.5 オブジェクトのパーツ(P.64) から


LT

jQueryを読んでみよう @tricknotes さん

まずはgitからソースコードを持ってくる

git clone https://github.com/jquery/jquery.git

buildするにはREADMEを嫁

  • node.js 0.2
  • git 1.7
  • GNU make 3.8

今のHEADは1.6.3pre

いきなりsourceを読んで前回敗北したのでtestを見ていく

  • QUnitで書かれてる
  • test/index.htmlをブラウザで開くと実行していく様子が見れる
  • test/unit/*.jsがテストコード
  • test codeから読むと何がしたいコードなのかわかるので、そこを頼りに読み解く

jQueryのcodeの中にはThe Good Partsがいっぱいある

    var jQuery = (function(){})(); // 無駄なglobal varをつくらない

Sapporo.js-webの裏事情 @tricknotes さん

Sapporo.js-web

  • nodeで動いてる
  • JoyentCloud

    • 通常はxxxxx.no.deというドメインになる
    • グローバルIPも貰える
    • sshも使える
    • git pushでdeploy
    • 1ヶ月くらい申請でかかる!
    • gcc v3.4.6, makeとかは入ってた
    • solarisの模様

ベースはLooseleaf.JSで作成

githubでサイト自体も公開

@onjiro_mohyahya さんがテーマのベースを作るので、その後pull-requestをお待ちしてます

0 件のコメント:

コメントを投稿