読者です 読者をやめる 読者になる 読者になる

この日記は私的なものであり所属会社の見解とは無関係です。 GitHub: takahashikzn

cofojaでラクラクDbC(予定)

Java

http://code.google.com/p/cofoja/

cofojaというプロジェクトがあります。これ、"Contract For Java"の略。
かつて存在したModernJassというプロジェクトの後継だそうです。


Contractという単語があることから判る通り、"Design by Contract"に関する何か、
だということが分かります。

すげー便利そう


トップページに載ってるサンプルコードが全てを物語っています。

interface Time {
  ...

  @Ensures({
    "result >= 0",
    "result <= 23"
  })
  int getHour();

  @Requires({
    "h >= 0",
    "h <= 23"
  })
  @Ensures("getHour() == h")
  void setHour(int h);

  ...
}

うむ。このコードが何を意図しているのかを、非常に簡潔に表現している。
これならJavadocを書く必要もないですね。


一応説明しておくと、

  @Ensures({
    "result >= 0",
    "result <= 23"
  })
  int getHour();

とコードに書くことで、

  • getHour()の仕様についての文書を完全にコードと一体化している。(Javadocより上手に)
  • getHour()が本当に0以上23未満の値だけを返すように実装されているかを自動的にチェックする。

という2つのことを同時に達成できる、ということです。


で、しかもこのcofojaのスゴイところは、それを静的に行うということ。
だからEclipseでコードがコンパイルされた瞬間に、自動的にチェックが行われるのです。


いちいちコードを実行する必要なんかないし、Eclipseと統合することで、antか何かでツールを起動する必要もない。
これ、非常に重要。だって手動での起動だと、面倒になっていつか使わなくなるから。


Eclipseでの使用方法は
http://fsteeg.com/2011/02/07/setting-up-contracts-for-java-in-eclipse/
を参照してください。


cofojaはまだアルファ版の状態なので、僕は本格活用を控えていますが、
ベータ版がリリースされたら、実際に仕事で使うつもりです。