• Clojureで事前条件/事後条件の表明(:pre/:post)

    Clojureでenliveを使った静的サイトジェネレーターを作っている。misakiには組み込めればと思っているが、無理なら諦める。今日はfileまわりのユーティリティにテストコードをつけて、別ファイルに切り出すなどリファクタリングした。もうしばらく出せないので、今日もTipsでお茶をにごす。

    さて、今日は表明(assertion)機能について。Clojureの関数は事前条件/事後条件を設定しておくことができる。方法としてはそれぞれ:preおよび:postをメタデータに付与しておく。下記コードを参照してほしい。

    すごく無意味なコードだけど、伝えたいのは:pre :postの部分だ。

    事前条件として引数が文字列であることを確認し、事後条件として戻り値が数値であることを確認している。事後条件の%には戻り値が入る。

    条件を満たさない場合は、java.lang.AssertionErrorが投げられる。Javaのassertを使うようなイメージだろう。入力チェックとして使うものではなく、あくまで前提条件を表明しておくものである。うまく使えば安心感を得ながらコーディングができると思う。

    こんなとこでいいですかね。

    20 min.

Clojureで事前条件/事後条件の表明(:pre/:post)

Clojureでenliveを使った静的サイトジェネレーターを作っている。misakiには組み込めればと思っているが、無理なら諦める。今日はfileまわりのユーティリティにテストコードをつけて、別ファイルに切り出すなどリファクタリングした。もうしばらく出せないので、今日もTipsでお茶をにごす。

さて、今日は表明(assertion)機能について。Clojureの関数は事前条件/事後条件を設定しておくことができる。方法としてはそれぞれ:preおよび:postをメタデータに付与しておく。下記コードを参照してほしい。

すごく無意味なコードだけど、伝えたいのは:pre :postの部分だ。

事前条件として引数が文字列であることを確認し、事後条件として戻り値が数値であることを確認している。事後条件の%には戻り値が入る。

条件を満たさない場合は、java.lang.AssertionErrorが投げられる。Javaのassertを使うようなイメージだろう。入力チェックとして使うものではなく、あくまで前提条件を表明しておくものである。うまく使えば安心感を得ながらコーディングができると思う。

こんなとこでいいですかね。

20 min.