Ассерты и контрактное программирование

С ассертами программист может проверять допущения во время работы программы. Синтакс при этом - assert(условие). Если ассерт не верен, то выполнение программы прекратиться с соответствующим сообщением об ошибке. Существует еще несколько видов ассертов в стандартном пространстве имен GLib:

assert_not_reached()

return_if_fail(bool expr)

return_if_reached()

warn_if_fail(bool expr)

warn_if_reached()

Вы можете попытаться использовать ассерты для проверки аргументов метода на null. Однако это вовсе не обязательно, т.к. Vala неявно проверяет все методы, которые не помечены ?.

void method_name(Foo foo, Bar bar) {
    /* Не обязательно, Vala делает это за вас:
    return_if_fail(foo != null);
    return_if_fail(bar != null);
    */
}

Vala поддерживает базовые возможности контрактного программирования. Метод может имет предусловия(требования) и постусловия (удостоверение), которые должны пройти до и после выполнения метода соответственно:

double method_name(int x, double d)
        requires (x > 0 && x < 10)
        requires (d >= 0.0 && d <= 1.0)
        ensures (result >= 0.0 && result <= 10.0)
{
    return d * x;
}

результатом является специальная переменная, представляющая возвращаемое значение.

Last updated