無料で使えるシステムトレードフレームワーク「Jiji」 をリリースしました!

・OANDA Trade APIを利用した、オープンソースのシステムトレードフレームワークです。
・自分だけの取引アルゴリズムで、誰でも、いますぐ、かんたんに、自動取引を開始できます。

JSLintを使ってみた。

JSLintというJavaScriptの検証器を発見したので、早速ContainerJSをチェックしてみました。WebUIが用意されているのでソースコードをコピペしてボタンを押すだけ。簡単に使えます。で、以下が見つかった不具合。

行の終わりにセミコロンがない。

なにげに結構あった。orz..意外と忘れるもんだなー。(Rubyのせい、という説あり。)

"]" のあとで改行されている
if ( def && def[container.Annotation.Container] // ← ここ
    && def[container.Annotation.Container][container.Annotation.Scope] == container.Scope.EagerSingleton ) {
    thiz.create( def );
}

セミコロン忘れにつながるのでエラーとして扱っているらしい。これは別にいいんじゃね?

変数を2重に宣言

以下のようなパターンがあった。

if ( nameOrType instanceof container.Type ) {
    // キャッシュがなければスキャン
    if ( !this.typeCache[nameOrType] ) {
        this._createTypeCahce( nameOrType );
    }
    var defs = this.typeCache[nameOrType]  // ←ここで宣言した「defs」を
    for ( var i=0; i < defs.length; i++ ) {
        objects.push( this.create( defs[i]) );
    }
} else {
    if ( this.nameCache[nameOrType] ) {
        var defs = this.nameCache[nameOrType]; // ← 再度宣言している
        for ( var i=0; i < defs.length; i++ ) {
            objects.push( this.create( defs[i]) );
        }
    }
}

とか、

for ( var i=0; i < params.length; i++ ) { // ←ここで宣言した「i」を
    tmp[params[i]] = org[params[i]];
}
tmp[container.Annotation.Intercept] = [];
if ( org[container.Annotation.Intercept] ) {
    var list = org[container.Annotation.Intercept];
    for ( var i=0; i < list.length; i++ ) { // ← 再度宣言している
        tmp[container.Annotation.Intercept].push( list[i] );
    }
}

とか。ブロックスコープはないんだよなー。気をつけよう。

コンストラクタ関数が大文字で始まっていない。
bind: function( clazz ) {
    return this._bind( "object", clazz.prototype.meta, function() {
        return new clazz(); // ←ここ
    });
},

引数で渡された関数をコンストラクタとして呼び出している訳だし、これもいいんじゃないの?


といったところ。セミコロンとかはかっこわるいのでぼちぼち直すかな。