D - Programación de contratos
La programación por contrato en la programación D se centra en proporcionar un medio simple y comprensible de manejo de errores. La programación por contrato en D se implementa mediante tres tipos de bloques de código:
- bloque de cuerpo
- en bloque
- fuera de bloque
Bloque de cuerpo en D
El bloque de cuerpo contiene el código de ejecución de la funcionalidad real. Los bloques de entrada y salida son opcionales, mientras que el bloque de cuerpo es obligatorio. A continuación se muestra una sintaxis simple.
return_type function_name(function_params)
in {
// in block
}
out (result) {
// in block
}
body {
// actual function block
}
En bloque para condiciones previas en D
En bloque es para condiciones previas simples que verifican si los parámetros de entrada son aceptables y están dentro del rango que puede manejar el código. Una ventaja de un bloque in es que todas las condiciones de entrada se pueden mantener juntas y separadas del cuerpo real de la función. A continuación se muestra una condición previa simple para validar la contraseña para su longitud mínima.
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"));
}
Cuando se compila y ejecuta el código anterior, lee el archivo creado en la sección anterior y produce el siguiente resultado:
true
Bloques de salida para condiciones posteriores en D
El bloque de salida se encarga de los valores de retorno de la función. Valida que el valor de retorno está en el rango esperado. A continuación, se muestra un ejemplo simple que contiene tanto la entrada como la salida que convierte meses, año en una forma de edad 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));
}
Cuando se compila y ejecuta el código anterior, lee el archivo creado en la sección anterior y produce el siguiente resultado:
12.8333