「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」など契約に適合した数値を入れているかぎりは、動作する。
 
 
このように、契約プログラミングは、けっしてコンパイルだけを契約違反で停止するのではなく、コンパイル以降も監視しており、実行中でも契約違反があればコードの実行を停止する。