2007年03月13日

Google Guice

Googleが作ったDIコンテナGoogle Guiceの1.0がリリースされた。
Google Guiceのサイトはこちら
これでGoogleジュースと読むらしい。

DIは直訳で依存性の注入で、簡単に言うとあるオブジェクトの属性や機能を外部から注入する感じ。
それにより依存関係が弱くなって実装を変更しなくちゃならない場合でも設定ファイルを書き換えるだけで実装を変更できる。と言うのがメリットだと言われているけど、それをメリットだと実感して「DIってスバラシィーーッ」って思ったことがないのでよくわかんない。
Webアプリ作成の業務でDIコンテナ使うことがあればそう思うのかもしれないけど。

と言うことでガイドはこちら。Springとはどうちがうねんと言うのはこちら。日本語でおkと言う場合はこちら(あるまに@monstar)

Google社内でAdWordsのために開発されたとあるけど、AdWordsはJavaで動いてるんだなぁ。検索はC++だったような気がする。GMailやGoogle CalendarはGWT使ってるからこっちもJavaなんかな。


あるまに@monstarさんところで
>特にDIのパフォーマンスで困っている訳でも、XML定義が大きすぎて困っている訳でもない私がGuiceにちょっと興味を持っているのは、ソース見たらジェネリクスがすごい事になっていたからです。
>正直、最初見た時ソースの文法が一部理解できなくて「ジェネリクスをフル活用するとこんなソースになるのか!」と衝撃を受けました。

と言うことなので見てみた。
確かにジェネリクス使いまくりだ~。と思ったけど気になったのはインデントがスペース2個なのと拡張for文使ってるところが「おっ」と思った。

Google社内のコードはタブが2文字でのインデントが伝統という記事がどっかに書いてあった。創業以前からの社長のポリシーとかなんか書いてあったっけな。なのでコードを見るだけで社内のコードか外部のコードかが一目でわかるという。

拡張for文は以下のように書けるfor文の省略版。ListのitemListからitemを取り出しつつループする。
for( Item item : itemList){
 item.use();
}
単に内部でIteratorを使ってるだけなので、Iterator経由の呼び出しにオーバーヘッドがあって、ArrayListの場合、単純にループの処理だけで3割ほど遅くなるとどっかに書いてあったので敬遠してた。
でも最近は「やっぱこれ便利じゃね?」と言うことで使いだしつつもある。

3割遅いって言ってもループ自体の処理の負荷なんて小さすぎるしループの中での処理の方が圧倒的に重いだろうしそう重要ではないよな。
でもJavaの拡張for文の不便なのは処理の負荷なんかじゃなく、perlのように添え字が自動生成できないところだ。
拡張for文で書いても、そのうち結局添え字が必要になってループカウンタ足したりする場面があるんだよな。
それにEclipseだと近くにあるリストや配列からfor文を自動生成してくれるし、拡張for文のメリットは見た目がすっきりする以外あんまり無い。

どうでも良いけどプログラマがfor文すらも自分で書かなくなってしまうとは恐ろしいことだ。
Eclipse便利すぎるぜ!

Trackback on "Google Guice"

このエントリーのトラックバックURL: 

"Google Guice"へのトラックバックはまだありません。

Comment on "Google Guice"

"Google Guice"へのコメントはまだありません。

Post a Comment

コメントする

コメント登録機能が設定されていますが、TypeKey トークンが設定されていません。