削除された内容 追加された内容
契約プログラミング
296 行
;実行結果
9
 
 
===== 契約プログラミング =====
関数を定義する際、入力値の要求事項と、出力値の要求事項とを記述する事ができる。こういう仕組みをプログラミング業界では「契約プログラミング」と言う。
 
D言語の契約プログラミングでは、要求事項を見たさない入力または出力がされた際、コンパイルを停止する。
 
 
;コード例
下記に、単に0以上の入力および出力を要求事項とするコード例をします(理解重視のため、実用性は皆無)。
 
<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( bbb(4) );
}
</syntaxhighlight>
 
;実行結果
9
 
 
:解説や書式
 
書式は、関数の冒頭などで。
 
<syntaxhighlight lang="D">
in {
assert(入力の要求事項);
}
out (result) {
assert(出力の要求事項);
}
body {
return 出力内容 ;
}
 
</syntaxhighlight>
 
のように書く。
 
例として、もし writeln( bbb(4) ); の関数 bbb() の引数を4でなく、たとえば「-7」など負の数にすると、入力の要求事項を満たさなくなるので、コンパイル禁止になる。
 
 
2020年現在、C言語には、契約プログラミングの機能は無い。
 
もしかしたら 2023年、C++の次回の規格改訂に契約プログラミングが盛り込まれる予想もあるが、あくまで予想である。
 
契約プログラミングを公式に、サポートしている言語は、いまのところ少ない。(非標準のライブラリなどでサポートされている言語はそこそこあるが、しかしプログラム言語の標準ライブラリでサポートされている言語は、かなり少ない。)
 
 
==== 構造体 ====