D - Programowanie kontraktów

Programowanie kontraktowe w programowaniu D koncentruje się na zapewnieniu prostego i zrozumiałego sposobu obsługi błędów. Programowanie kontraktowe w D jest realizowane za pomocą trzech typów bloków kodu -

  • blok ciała
  • w bloku
  • się blok

Body Block w D.

Blok treści zawiera rzeczywisty kod funkcjonalności wykonania. Bloki wejściowe i wyjściowe są opcjonalne, natomiast blokada ciała jest obowiązkowa. Poniżej przedstawiono prostą składnię.

return_type function_name(function_params) 
in { 
   // in block 
} 

out (result) { 
   // in block 
}
 
body { 
   // actual function block 
}

W bloku dla warunków wstępnych w D

W bloku jest dla prostych warunków wstępnych, które weryfikują, czy parametry wejściowe są akceptowalne i mieszczą się w zakresie, który może być obsługiwany przez kod. Zaletą bloku in jest to, że wszystkie warunki wejścia mogą być przechowywane razem i oddzielone od rzeczywistej treści funkcji. Poniżej przedstawiono prosty warunek wstępny weryfikacji hasła dla jego minimalnej długości.

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")); 
}

Kiedy powyższy kod jest kompilowany i wykonywany, odczytuje plik utworzony w poprzedniej sekcji i generuje następujący wynik -

true

Nasze bloki dla warunków pocztowych w D

Blok out dba o wartości zwracane przez funkcję. Sprawdza, czy zwracana wartość mieści się w oczekiwanym zakresie. Poniżej pokazano prosty przykład zawierający zarówno wejście, jak i wyjście, który konwertuje miesiące, rok na połączoną dziesiętną formę wieku.

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)); 
}

Kiedy powyższy kod jest kompilowany i wykonywany, odczytuje plik utworzony w poprzedniej sekcji i generuje następujący wynik -

12.8333