Contract programming in D programming is focused on providing a
simple and understandable means of error handling.Contract programming
in D are implemented by three types of code blocks:
- body block
- in block
- out block
body block
Body block contains the actual functionality code of execution. The
in and out blocks are optional while the body block is mandatory. A
simple syntax is shown below.
return_type function_name(function_params)
in
{
// in block
}
out (result)
{
// in block
}
body
{
// actual function block
}
in block for pre conditions
In block is for simple pre conditions that verify whether the input
parameters are acceptable and in range that can be handled by the code. A
benefit of an in block is that all of the entry conditions can be kept
together and separate from the actual body of the function. A simple
precondition for validating password for its minimum length is shown
below.
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"));
}
When the above code is compiled and executed, it reads the file created in previous section and produces the following result:
true
out blocks for post conditions
The out block takes care of the return values from the function. It
validates the return value is in expected range. A simple example
containing both in and out is shown below that converts months, year to a
combined decimal age form.
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));
}
When the above code is compiled and executed, it reads the file created in previous section and produces the following result:
12.8333
No comments:
Post a Comment