D-programming-contract-programming

提供:Dev Guides
移動先:案内検索

D-契約プログラミング

Dプログラミングのコントラクトプログラミングは、エラー処理のシンプルでわかりやすい手段を提供することに焦点を当てています。 Dのコントラクトプログラミングは、3種類のコードブロックによって実装されます-

  • ボディブロック
  • ブロックで
  • アウトブロック

Dのボディブロック

本体ブロックには、実行の実際の機能コードが含まれています。 入出力ブロックはオプションですが、本体ブロックは必須です。 以下に簡単な構文を示します。

return_type function_name(function_params)
in {
  //in block
}

out (result) {
  //in block
}

body {
  //actual function block
}

Dの事前条件のブロック内

ブロック内は、入力パラメーターが受け入れ可能で、コードで処理できる範囲内にあるかどうかを検証する単純な事前条件用です。 ブロック内の利点は、すべての入力条件をまとめて、関数の実際の本体から分離できることです。 パスワードを最小長で検証するための簡単な前提条件を以下に示します。

import std.stdio;
import std.string;

bool isValid(string password)
in {
   assert(password.length>=5);
}

body {
  //other conditions
   return true;
}

void main() {
   writeln(isValid("password"));
}

上記のコードがコンパイルおよび実行されると、前のセクションで作成されたファイルを読み取り、次の結果を生成します-

true

Dの事後条件のアウトブロック

outブロックは、関数からの戻り値を処理します。 戻り値が期待される範囲内にあることを検証します。 月と年を組み合わせた10進数の年齢形式に変換する、入力と出力の両方を含む簡単な例を以下に示します。

import std.stdio;
import std.string;

double getAge(double months,double years)
in {
   assert(months >= 0);
   assert(months <= 12);
}

out (result) {
   assert(result>=years);
}

body {
   return years + months/12;
}

void main () {
   writeln(getAge(10,12));
}

上記のコードがコンパイルおよび実行されると、前のセクションで作成されたファイルを読み取り、次の結果を生成します-

12.8333