Контрактное программирование


Предыдущая страница
Следующая страница  

Контрактное программирование в языке D сосредоточено на предоставлении простых и понятных средств обработки ошибок. Контрактное программирование в D реализуется тремя типами блоков кода:

Блок body в D

Блок body содержит фактический исполняемый код. Блоки in и out являются необязательными, а блок body является обязательным. Ниже приведён простой синтаксис.

возвращаемый_тип имя_функции(параметры_функции) 
in { 
   // блок in 
} 

out (result) { 
   // блок out 
}
 
body { 
   // фактический блок функции
}

Блок in для предусловий в D

Блок in используется для простых предварительных условий, в которых проверяется, допустимы ли входные параметры и находятся ли они в пределах того диапазона, который может обрабатываться кодом. Преимущество блока in в том, что все входные условия могут храниться вместе и отделяются от фактического тела функции. Ниже приведено простое предусловие для проверки пароля на минимальную длину.

import std.stdio; 
import std.string;
  
bool isValid(string password) 
in { 
   assert(password.length>=5); 
}
 
body { 
   // другие условия 
   return true; 
}
  
void main() { 
   writeln(isValid("пароль")); 
}

Когда вы скомпилируете и выполните эту программу, она возвратит следующий результат:

true 

Блоки out для постусловий в D

Блок out заботится о возвращаемых значениях из функции. Он подтверждает, что возвращаемое значение находится в ожидаемом диапазоне. Ниже показан простой пример, содержащий как in, так и out; здесь пара месяц, год преобразуется в возраст в комбинированной десятичной форме.

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

Предыдущая страница
Следующая страница