D - Programação de Contrato
A programação de contrato na programação D se concentra em fornecer um meio simples e compreensível de tratamento de erros. A programação de contrato em D é implementada por três tipos de blocos de código -
- bloqueio corporal
- em bloco
- fora do bloco
Bloco corporal em D
O bloco de corpo contém o código de funcionalidade real de execução. Os blocos de entrada e saída são opcionais, enquanto o bloco do corpo é obrigatório. Uma sintaxe simples é mostrada abaixo.
return_type function_name(function_params)
in {
// in block
}
out (result) {
// in block
}
body {
// actual function block
}
No Bloco para Pré-condições em D
Em bloco é para pré-condições simples que verificam se os parâmetros de entrada são aceitáveis e dentro da faixa que pode ser manipulada pelo código. Um benefício de um bloco interno é que todas as condições de entrada podem ser mantidas juntas e separadas do corpo real da função. Uma pré-condição simples para validar a senha para seu comprimento mínimo é mostrada abaixo.
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"));
}
Quando o código acima é compilado e executado, ele lê o arquivo criado na seção anterior e produz o seguinte resultado -
true
Blocos de saída para pós-condições em D
O bloco de saída cuida dos valores de retorno da função. Ele valida se o valor de retorno está na faixa esperada. Um exemplo simples contendo entrada e saída é mostrado abaixo, que converte meses, ano em uma forma de idade decimal combinada.
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));
}
Quando o código acima é compilado e executado, ele lê o arquivo criado na seção anterior e produz o seguinte resultado -
12.8333