「表明 (プログラミング)」の版間の差分

削除された内容 追加された内容
Melan (会話 | 投稿記録)
Ponta2 (会話 | 投稿記録)
4行目:
 
== 使用法 ==
[[Eiffel]]のような言語では、表明は設計工程の一部である。[[C言語|C]]や[[Java (プログラミング言語)|Java]]では実行時に前提条件をチェックするだけである。いずれの場合も実行時に正当性をチェックすることができるが、最終的には抑止されることが多い。
 
=== 契約による設計としての表明 ===
12行目:
 
=== 実行時チェックとしての表明 ===
表明はプログラマが前提条件としていたことがプログラム実装中にも保持され、プログラム実行時でも正しいことを保証するのに使われる。例えば、以下の[[Java (プログラミング言語)|Java]]コードを見てみよう:
 
int total = countNumberOfUsers();
24行目:
}
 
[[Java言語]]では <code>%</code> は剰余演算子である。その第一オペランドが負であった場合、演算結果も負となる。ここでプログラマは <code>total</code> が負でないという前提でコーディングしており、2 で割った剰余は常に 0 か 1 だと考えている。表明(assert)は、その前提条件を明確に示している。<code>countNumberOfUsers</code> が負数を返す可能性があるなら、これはプログラムのバグとなる可能性がある。
 
この技法の主な利点は、問題が発生したときにそれを即時かつ直接的に検出できる点であり、後から検出しても様々な副作用によって真の原因がなかなかつかめないことがある。表明違反はコード上の位置を表示することが多いので、煩雑なデバッグ作業なしで問題点を即座に発見することができる。
 
表明は決して実行されないと見なされている箇所に置かれることもある。例えば、[[C言語|C]]、[[C++]]、[[Java言語]]のような言語で、<code>switch</code> 文の <code>default</code> 節に表明を置くことがある。プログラマが予期しない状態が発生した場合、実行をそのまま続けるのではなく、エラーを発生させてプログラムを停止させるのである。
 
[[Java言語]]では、表明はバージョン 1.4 から言語の一部となった。表明違反は <code>AssertionError</code> を発生させる。[[C言語]][[C++]]では標準ヘッダファイルで <code> assert (''assertion'') </code> マクロが定義されており、エラーを表示してプログラムを停止させるようになっているのが一般的である。
 
=== 開発サイクル内での表明 ===