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