Вы используете утверждения? [закрытый]

Очевидное решение является медленным и использует память, как отмечено другими. Если возможно, необходимо попытаться задержать замену элемента (элементов), пока Вы не должны выполнять другую поэлементную операцию в списке, например, (loop for x in list do ...).

Тот путь, Вы амортизируете далеко концентрирующий (память) и повторение (CPU).

18
задан 3 revs, 2 users 100% 5 August 2009 в 19:11
поделиться

16 ответов

Еще в 90-х меня учили использовать множество утверждений, и они имели большой смысл. Это хорошее защитное кодирование.

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

14
ответ дан 30 November 2019 в 06:02
поделиться

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

0
ответ дан 30 November 2019 в 06:02
поделиться

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

Если вы проводите модульное тестирование, например, с помощью nUnit, вы, очевидно, будете использовать их все время для проверки результаты ваших тестов.

0
ответ дан 30 November 2019 в 06:02
поделиться

Ключевое слово assert в Java почти наполовину задано (необходимо запускать программу с параметром командной строки -ea), поэтому я полагаюсь на исключения вместо утверждений.

1
ответ дан 30 November 2019 в 06:02
поделиться

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

1
ответ дан 30 November 2019 в 06:02
поделиться

Да! Всегда! Ключевое слово - мой лучший друг на всех языках!

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

Если утверждение не выполняется, это означает, что мне нужно переоценить свои предположения и обновить код для обработки нового экзотического ввода, о котором я не подумал при написании текущей версии. Что в этом не нравится?

Как обычно в программировании, этот инструмент эффективен только при правильном использовании.

2
ответ дан 30 November 2019 в 06:02
поделиться

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

0
ответ дан 30 November 2019 в 06:02
поделиться

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

2
ответ дан 30 November 2019 в 06:02
поделиться

Нет, я ими не пользуюсь.

Меня учили, что утверждения не следует использовать в «производственном» коде, и прежде чем я начну использовать что-то, что мне все равно придется удалить - в соответствии с тем, что я узнал, - я придерживаюсь исключения для проверки условий.

0
ответ дан 30 November 2019 в 06:02
поделиться

Краткий ответ - Да

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

Для других вещей, таких как «Анализ файлов» и «Файл не может быть найден» , Я обычно выкидываю исключения. Таким образом, я могу зарегистрировать ошибку и вместо этого использовать какой-нибудь отказоустойчивый файл / метод.

И я полностью согласен с Фалаиной, вам действительно стоит обратить внимание на - «ЭЙ! Я здесь делаю некоторые предположения»

4
ответ дан 30 November 2019 в 06:02
поделиться

Я использую их все время. Это хороший способ практиковать философию «раннего сбоя», лучше решить, почему утверждение не удалось, чем иметь дело с плохим / поврежденным выводом.

Проблема в том, что вы должны как бы сделать это привычкой . Я редко вижу в этом какую-то золотую середину, люди либо не привыкли к этому и почти никогда не используют их, либо люди их используют, и они сильно замусорены по всему коду. Вам просто нужно сформировать образ мышления, чтобы замечать: «Ой, я неявно предполагаю что-то здесь, позвольте мне явно подтвердить это« assert (ASSUMPTION) »»

14
ответ дан 30 November 2019 в 06:02
поделиться

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

4
ответ дан 30 November 2019 в 06:02
поделиться

Я ими не пользуюсь. Модульных тестов должно быть достаточно для тестирования вашего кода. Более того, поскольку они отключены по умолчанию, они обычно полностью игнорируются. Затем они просто загромождают ваш код бесполезными утверждениями, которые можно было бы лучше выразить в виде комментариев.

Однако, если вам это действительно нужно, в некоторых библиотеках есть статические методы утверждений, которые вы можете вызывать, которые не будут пропущено - они также намного более читабельны, потому что ключевое слово assert встречается редко и сразу может вызвать момент "wtf", но методы Assert.x - это просто методы, которые можно отследить. В частности, среда Spring использует библиотеку утверждений.

3
ответ дан 30 November 2019 в 06:02
поделиться

Если вам нравятся утверждения, вам понравятся контракты. По сути, они представляют собой идею утверждений, распространенных на большее количество ситуаций.

2
ответ дан 30 November 2019 в 06:02
поделиться

Я использую утверждения, чтобы убедиться, что я не привожу ошибок в свой код. Если я знаю, что значение должно быть на карте, я утверждаю это (используя ключевое слово assert). Если я знаю, что параметр никогда не должен быть нулевым, я утверждаю это. Если я знаю, что параметр может иметь значение NULL, я проверю его и выдаю соответствующее исключение.

Я прочитал его в Code Complete или Effective Java - утверждения следует использовать для обнаружения ошибок программирования - исключения следует использовать для обработки исключительных но возможные ситуации. Вам не нужно проверять значение null для каждого метода вашего кода, если вы знаете, что значение не будет нулевым (как определено в контракте), но не повредит утверждать, если значение не равно null. Утверждения включены только в том случае, если вы укажете параметр -ea для виртуальной машины, и они не должны влиять на производительность вашего приложения, если они отключены.

Вам также следует использовать больше журналов :-). Узнайте, когда использовать трассировку, отладку и информацию, и убедитесь, что вы регистрируете все, что делает ваше приложение. Это значительно упрощает жизнь, когда вам нужно выяснить, почему что-то не работает в производственной среде.

11
ответ дан 30 November 2019 в 06:02
поделиться

Да, я постоянно использую утверждения, в основном всякий раз, когда делаю предположение, которое:

  1. Можно проверить с помощью довольно простого предиката.
  2. Не является очевидной истиной просто при чтении близлежащего кода.

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

2
ответ дан 30 November 2019 в 06:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: