あどけない話

インターネットに関する技術的な話など

D で契約プログラミング

プログラミング言語 D で、Design by Contactにある例題を実装してみて気付いたこと。

エラー・メッセージ

assert にひっかかったときに表示されるメッセージが貧弱。 (ショボーン)

Error: AssertError Failure dbc.d(26)

まぁ、debug と組み合わせるといいのかな? (面倒だけど。)

out {
  debug(1) {
    writefln("count: " , count);
  }
  assert(count >= 0);
}

古い値

Eiffel でいう old は、どう書くんだろうと調べてみたところ、D's design by contract is missing "old"?で議論されているように、書けないみたいです。使えなーい。

せめて、in と out のローカル変数のスコープが一緒なら、以下のように書けて、よかったのにぃ。

in {
  int oldcount = count;
}
out {
  assert(count == ++oldcount);
}