GContracts を触ってみました

久々の Groovy ネタです。


以前、GContract - uehaj's blog で紹介されていて触ってみようと思っていたのですが、一昨日やっと触ってみました。
面白いな〜と思ったので、簡単に紹介を。
現在は、1.1.2 迄リリースされているようです。
GContracts 1.1.2 Released! | Blog
ダウンロードは、こちらから。
Downloads · andresteingress/gcontracts · GitHub
gcontracts-1.1.2.jar をダウンロードすると、拡張子が zip になっていたので jar に変更し、GroovyConsole で使うために、%USERPROFILE%\.groovy\lib に配置しました。
その後、上記ブログで紹介されているコードを実際に試してみました。

accelerate メソッドの事前条件(Requires)は、started フィールドが true なので、false の時に呼び出すと怒られました。

また、Rocket クラスの不変条件(Invariant)では、0 <= spped <= 100 なので、それを破ると怒られます。

何も契約を破っていないと正常に終了します。
条件は、クロージャーで書けるみたいです。また、継承先(BetterRocket)のクラスにも条件を追加してみると…

この場合、Super(Rocket)クラスで指定した不変条件と継承先(BetterRocket)のクラスで指定した不変条件両方とも影響を受けました。
色々試してみましたが、Super クラスの不変条件の判定が先に行われて、その後継承先のクラスの判定が行われているようでした。


ちょっと面白そうじゃないですか?