Где поставить утверждения? - PullRequest
9 голосов
/ 31 января 2011

Наличие утверждений о непредвиденных условиях считается хорошей защитной практикой кодирования. Я делаю утверждения всякий раз, когда думаю, что может произойти что-то неожиданное, но сейчас это кажется мне излишним.

Кроме того, иногда легкие неожиданные условия, которые не обязательно приводят к сбою, могут даже вызвать сбой на стороне клиента.

Существует ли жесткое и быстрое правило для выставления утверждений?

Спасибо.

Ответы [ 5 ]

6 голосов
/ 31 января 2011

Основная разница между утверждениями и исключениями:

  • Используйте утверждение для обнаружения ошибок программирования. Утверждения никогда не должны происходить, если код написан правильно.

  • Использование исключений для обнаружения ошибок во время выполнения, вызванных непредвиденной средой.

  • Если ваша программа читает сценарий или содержимое из файла и они не соответствуют ожидаемому формату, я считаю, что это условие времени выполнения, поэтому исключение.

Вы можете решить, для целей отладки, использовать утверждение в месте, где выбрасывается исключение, просто для того, чтобы было проще работать с ним, хотя вы можете использовать макросы исключений, которые вставляют FILE и LINE в сообщении, чтобы сделать это тоже.

5 голосов
/ 31 января 2011

Где поставить утверждения?

Что часто упускают из виду, так это то, что утверждение может также служить вспомогательным средством документации.

Так что не только проверяйте «неожиданные», но и используйте их для выражения ваших предположений (инвариантов) в критических точках вашего кода. Как assert(high >= low)

И, конечно, сделайте их условными, как уже указывали другие.

2 голосов
/ 31 января 2011

Нет, нет ... но я бы определенно рекомендовал по-разному относиться к утверждениям при тестировании и производстве.

В тестовой среде вполне нормально производить дамп ядра.Это позволяет легко проверять условия, которые инициировали утверждение, благодаря безопасному сохранению всего состояния программы.

Однако в производственной среде вы никогда не захотите аварийно завершить работу (кроме случаев повреждения памяти ...),Пользователь ожидает, что система будет всегда отвечать, нет ничего более раздражающего, чем запрос чего-либо и никогда не получение ответа.Поэтому ваша задача - обеспечить, чтобы пользователь получил более значимый возможный ответ, даже если это сообщение об ошибке.Самый простой способ достичь этого - это бросить исключение.

0 голосов
/ 31 января 2011

по звукам, вы оставляете их включенными в сборках релиза. если это так, создайте уровни утверждений - те, которые будут включены или отключены в определенных сборках. затем просто используйте уровень утверждения.

Таким образом, вам не нужно отключать, отключать или удалять их для разработки и отладки сборок или бета-версий.

Обычно я отключаю их в выпуске, но они потребляют массу написанного кода. я не думаю, что это плохо - это служит документацией и обеспечивает интерфейс, который будет использоваться по назначению. я думаю, что хорошо иметь то, что многие разработчики могут считать слишком многими утверждениями, но на самом деле их не так уж много, потому что кодовые базы развиваются, и это гарантирует, что программы всегда используются по назначению. поэтому я не рекомендую удалять их, просто отключите нефатальные проверки для сборок релиза.

в конечном счете, есть лучшие подходы, чем уровни (см. Обсуждение ниже и возьмите то, что вы хотите из ответов других), - но уровни - это один из простых способов представить изменения, не оказывая существенного влияния на существующие программы. это было бы хорошим подходом для перехода к другой схеме обработки ошибок, или если вы> 98% довольны тем, что у вас уже есть.

0 голосов
/ 31 января 2011

Утверждения ставятся, когда вы абсолютно уверены, что некоторые условия должны быть выполнены перед переходом на следующий уровень вашего кода.Например, когда дескриптор окна недопустим или когда некоторая переменная не имеет допустимого значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...