Каждая функция / метод / кодовый блок должен иметь предусловие , которое является точными обстоятельствами, при которых он предназначен для работы, и постусловие ,состояние мира, когда функция возвращается.Они помогают вашим коллегам-программистам понять ваши намерения.
По определению, код не должен работать, если предварительное условие ложно, и считается ошибочным, если постусловие ложно.
Независимо от того, пишете ли вывсе это у вас в голове, на бумаге, в проектной документации, в комментариях или в реальных проверках кода - дело вкуса.
Но практический вопрос, долгосрочный, облегчает жизнь, если вы кодируете предварительное условие и постусловие как явные проверки.Если вы кодируете такие проверки, поскольку ожидается, что код не будет работать с ложным предварительным условием, или глючит ложное постусловие, проверки до и после условия должны заставить программу сообщать об ошибке таким образом, чтобы упростить ее.обнаружить точку отказа.То, что НЕ ДОЛЖНО делать, это просто «вернуть», ничего не сделав, как показывает ваш пример, поскольку это подразумевает, что он каким-то образом выполнялся правильно.(Конечно, код может быть определен , чтобы выйти, ничего не сделав, но если это так, предварительные и последующие условия должны это отражать.)
Очевидно, что такие проверки можно написать соператор if (ваш пример опасно близок):
if (!precondition) die("Precondition failure in WorriedFunction"); // die never comes back
Но часто присутствие предварительного или постусловия указывается в коде путем определения специальной функции / макроса / оператора ... дляязык называется утверждение , и такая специальная конструкция обычно вызывает прерывание программы и обратный след, когда утверждение ложно.
Способ написания кода должен быть следующим:
void WorriedFunction(...)
{ assert(argument1 != null); // fail/abort if false [I think your example had the test backwards]
assert(argument2 + argument3 >= 0);
assert(!stateManager.currentlyDrawing());
/* body of function goes here */
}
Сложные функции могут сообщить своим вызывающим, что какое-то условие не выполнено.Это настоящая цель исключений.Если присутствуют исключения, технически постусловие должно сказать что-то вроде «функция может выйти с исключением при условии xyz».