D Contratto

Da Andreabont's Wiki.

Il D fornisce nativamente il supporto agli alla programmazione per contratto. E' possibile definire, per un metodo o una funzione, 3 scope chiamati in, out e body nei quali è possibile rispettivamente inserire i test ai parametri di ingresso, i test sul valore di ritorno e il corpo della funzione.

Codice per funzioni

import std.stdio;

long funzione(long x)
in {
    assert(x >= 0);
}
out (result) {
    assert((result + result) == x);
}
body {
    return x/3;
}

void main() {
    long n = 2;
    writeln(funzione(n));
}

Codice per le interfacce

interface I
{
    int foo(int i)
    in { assert(i > 7); }
    out (result) { assert(result & 1); }

    void bar();
}

Compilare

I test verranno eseguiti a run-time, lanciando un errore di assert se i test falliscono. E' da notare che i test rallentano l'esecuzione del programma, sono quindi da progettare con attenzione per non diminuire eccessivamente le prestazioni.

dmd <file.d>