亀岡的プログラマ日記

京都のベッドタウン、亀岡よりだらだらとお送りいたします。

コードコントラクトが面白そう

とある契約の備忘目録。契約による設計(Design by Contract)で信頼性の高いソフトウェアを構築しよう。 - Bug Catharsis

前々から気になっていたけど、上の記事でかなり興味を持った。

ちょっと考えるのはテスト駆動開発との関連性。
関数の外側で(別メソッドとして)とりうるべき動きを先に書くのがテスト駆動で、関数の中(入り口が普通??)に、そのクラスが負う責任を記述するのがコードコントラクト。なのかな?

見た感じ二種類あって、Contract.Requiresのようにクラス自身が要求するものと、Contract.Ensureのように自らに課する契約があるんだなあと。

あ、でもEnsureを親クラスに課すこともできるのか。うむむ。

あと、テスト駆動はクラス内の処理の正確性を保障するけどCodeContractはそうではない。(あくまでエラーを返さない、例外を出さないというレベル。それを利用者側に強いるイメージ)

その意味だと、Javaの実行時例外と似ている??ただ実行時例外は「落ちない」しくみだけど、CodeContractは「プログラミングで間違わない」仕組みだよなあ。

ふむ。