by shigemk2

当面は技術的なことしか書かない

達人プログラマー 6

31 契約を用いて設計を行うこと
Design by Contract

不変表明に必要なもの

  • 事前条件 ルーチンを呼び出すために成立させておかなければならないこと。違反したら呼び出してはならない
  • 事後条件 ルーチン終了後に保証していること。永久ループは許されない。
  • クラス不変表明 クラスが呼び出し側に対して常に真となることを保証する条件のこと。

条件は厳格に、確約は少なく。
設計時に、入力値が取りうる範囲や境界条件などを予め書くだけでもよい。
ただし、DBCは全てのコーディングには使えない。
(DBCをサポートしている言語も存在する)

32 早めにクラッシュさせること
死んだプログラムは嘘をつかない。
問題が発生した場合、トラッシュ(コードを滅茶苦茶にする)ではなくクラッシュ(停止)が推奨される。

33 もし起こり得ないというのであれば、表明を用いでそれを証明すること
assertをかけるとかして表明をonにしておくこと。

例外
34 例外は例外的な問題のみに使用すること
可読性と保守性の問題から、例外を使うコードはスパゲティになりやすい。
代替案として、エラーハンドラーの使用を考えるべし。

35 始めたことは終わらせること
コンストラクトしたものはデストラクトしないといけないし、
オープンしたファイルはクローズしないといけない。
また、ネストはどこかで終わらせないといけない。

また、リソースが適切に解放されているかどうかを
チェックするコードを作るのも良い考えだって。