「D言語/関数」の版間の差分
削除された内容 追加された内容
body と do の件 |
コンパイル以降の契約プログラミングの監視 |
||
140 行
関数を定義する際、入力値の要求事項と、出力値の要求事項とを記述する事ができる。こういう仕組みをプログラミング業界では「契約プログラミング」と言う。
D言語の契約プログラミングでは、要求事項を見たさない入力または出力がされた際、コンパイルを停止する。すでにコンパイルされている場合でも、実行だいるを停止する。
206 行
今のところ body も引き続き、使える。
;コンソール入力との組み合わせの例
readf() などの関数を使うと、キーボードからの入力を受け付けるので、それを使って数値をいろいろと入力して、契約プログラミングのコードをテストしてみよう。
;コード例
<syntaxhighlight lang="D">
import std.stdio;
float bbb(float num)
in {
assert(num >= 0);
}
out (result) {
assert(result >= 0);
}
body {
return num + 3;
}
void main(){
writeln("Please input number");
int some;
readf("%d",&some);
writef("you input %d\n",some );
writeln( bbb(some) );
}
</syntaxhighlight>
実際にテストしてみると、何も入力していない間は、いったんコンパイルできて実行できても、「-4」などマイナスの数を入力すると、そこで実行を停止する。
もちろん、プラスの「5」など契約に適合した数値を入れているかぎりは、動作する。
このように、契約プログラミングは、けっしてコンパイルだけを契約違反で停止するのではなく、コンパイル以降も監視しており、実行中でも契約違反があればコードの実行を停止する。
|