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

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

DIコンテナ作成計画

JavaScriptで使えるDIコンテナはないかなとGoogleで10分だけ探したけど見つからなかったので、作ることにしました!(予定)

何に使うの?

MVCでUIを作ると、各レイヤー間の依存関係が何気に複雑になりがちです。

  • 要素のイベントハンドラとコントローラの関連付けとか(View-Controllerの関連付け)
  • モデルの変更を捕捉してUIを更新とか(View-Modelの関連付け)

このあたりを一手にやってくれるコンテナがあったら、使えるかなと思うわけです。

コンセプト

超軽量。

計画
// コンテナを作成
// 引数でコンポーネントの定義を記述する関数を渡す。
var c = new container.Container( function( binder ) {
  
  // "name" に sample.Kitten クラスを関連付ける。
  binder.bind("name").to( sample.Kitten ) ;
  binder.bind("name").toProvider( function( container ){
    return obj;      
  } );
  binder.bind("name").toInstance( obj  );
  binder.bind("name").toFunction( "name", "functionName" );
  
  // すべての設定を行ったもの。
  binder.bind( "name" ).to( sample.Kitten  ).inject( {
     "field1": "name",
     "field2": "name"
  }).initialize( function( obj, container ){
  }).destroy( function( obj, container ){
  }).scope( container.Scope.Singleton ).intercept(  function(){}, /.*/, /.*/ ) ;
  
  // すべてのコンポーネントに適用するインターセプタ
  binder.bindInterceptor(  function(){}, /.*/, /.*/  );   
} );

// コンテナからコンポーネントを取得する。
var kitten = container.get( "kitten" );


//デフォルトの設定はアノテーションでもできる。
function Kitten () {}
Kitten.prototype.meta = {
  "@container.inject": {
      "field":"service"
  },
  "@container.initialize":function( obj, container ){},
  "@container.destroy": function( obj, container ){},
  "@container.scope":   container.Scope.Singleton,
  "@container.intercept": [
      [ function(){}, [ /.*/, /.*/ ], [/.*/]]
      [ function(){}, [ /.*/, /.*/ ], [/.*/]]
   ]
}

System#identityHashCode(Object)

System#identityHashCode(Object)で、オブジェクトの「デフォルトのハッシュコード(Object#hashCode()と同じ値)」を返します。

  • クラスがhashCode()をオーバーライドしていてもオーバーライド前のハッシュコードを取得できます。
  • 返される値は、通常、オブジェクトの内部アドレス値を整数に変換した値になります。
  • 注意:一意とは限りません。オブジェクトのアドレス空間がintより多いVMの場合、同じ値を返すオブジェクトが存在する可能性があります。
String a = new String("a");
String b = new String("a");

System.out.println( "equals :" + a.equals(b) ); // -> true

// StringではhashCode()はオーバーライドされているため同じ値を返す。
System.out.println( "hashCode a :" +  a.hashCode() ); 
System.out.println( "hashCode b :" +  b.hashCode() );

// a,bはそれぞれ別のオブジェクトなので、別の値を返す。
System.out.println( "id a :" + System.identityHashCode(a) ); 
System.out.println( "id b :" + System.identityHashCode(b) ); 

実行結果です。

equals :true
hashCode a :97
hashCode b :97
id a :827574
id b :17510567