Idiomatic D. Специальные виды утверждений [перевод]

В этот раз, в качестве идиом, будут описаны нестандартные виды утверждений (assert’ов), о которых знают достаточно немногие…

Выражения assert(0), assert(false), assert(null) и подобные им ложные утверждения во время компиляции не дают обычных, типовых утверждений.

Вместо создания утверждений, эти выражения приводят к падению программы (crash of program) и не удаляются компилятором при применении опции -release.

string getStuff()
{
    if(expr)
        return "something";
    assert(1 < 0); // так можно делать, но обычно используют "assert(0)"
    // return не нужен, так как программа просто потерпела крах
}

Утверждение assert(false) также обозначает тот факт, что функция не обязана ничего возвращать, так как в случае применения assert(false) произойдет крах программы.

Но это не означает, что функция не дает никаких эффектов, напротив, утверждения такого типа говорят о немедленном падении программы и компилятор не будет вырезать такие assert’ы.

2 Комментарии “Idiomatic D. Специальные виды утверждений [перевод]

  1. Читаю статью, и понимаю, что у меня включен adblock — «Реклама» в сайдбаре пуста. Ладно, надо уважить дружественный ресурс. Выключаю Adblock, обновляю страницу. И тут!…
    http://imgur.com/fGYBFtr
    Злые вы, товарищи. Так и заикой недолго остаться.

    Кстати, ссылка на идиомы битая (относительная, а не абсолютная)

  2. Неплохо, ни разу такого не попадалось)) И это не мы злые, а гугл. За ссылку спасибо, поправили.

Добавить комментарий