Вопрос о значениях по умолчанию в целом - значения функций возврата по умолчанию, значения параметров по умолчанию, логика по умолчанию для случаев, когда чего-то не хватает, логика по умолчанию для обработки исключений, логика по умолчанию для обработки краевых условий и т. Д.
Долгое время я считал значения по умолчанию «чистым злом», то, что «скрывает катастрофу» и приводит к очень трудным поискам ошибок. Но недавно я начал думать о значениях дефолта как о каком-то техническом долге ... что не так уж плохо, но что-то, что могло бы обеспечить "краткосрочное финансирование", чтобы заставить нас выжить в проекте (сколько из нас могли себе позволить купить дом без ипотеки?).
Когда я говорю «на короткий срок» - я не имею в виду - «сначала сделайте что-нибудь быстро и сделайте рефакторинг позже, прежде чем это произойдет». Нет - я говорю о том, чтобы полагаться на жестко заданные значения по умолчанию в производственном программном обеспечении. Конечно, это может вызвать некоторые проблемы, но что, если это вызовет только одну проблему за целый год.
Опять же - я имею в виду «среднее» основное программное обеспечение здесь (не программное обеспечение для атомной электростанции) - средний веб-сайт или приложение для пользовательского интерфейса для бухгалтерского программного обеспечения, означающее, что жизнь людей не поставлена на карту, ни миллионы долларов ,
Опять же, исходя из моего опыта, бизнес-пользователи предпочитают жить с программным обеспечением, которое «работает как-то», а не ждать идеального. И использование значений по умолчанию очень помогает, если вы разрабатываете программное обеспечение в стиле RAD. Но опять же - самые длинные сеансы отладки, которые я провел, были из-за ошибок, внесенных значением по умолчанию, которое либо перестало быть «по умолчанию», либо потому, что недавно была обновлена небольшая подсистема, и в результате этого обновления она не правильно обрабатывать значения по умолчанию (например, пустой список или пустая строка или пустая строка или пустая строка).
Поэтому мой вопрос - являются ли значения по умолчанию добром или злом. И если это технический долг - как определить, сколько вы можете одолжить, чтобы позволить себе выплаты?
Был бы очень признателен за любой вклад.
Приветствия.
РЕДАКТИРОВАТЬ:
Если я использую значения по умолчанию как способ обрезать углы во время разработки - и если обрезка углов приводит к ошибкам и проблемам - какова методология для устранения этих проблем?
Foo()
и один звонокFoo("bar")
, этот звонок имеет тенденцию выделяться и, следовательно, более заметен.new FtpService()
тот, который устанавливает альтернативный порт (service.SetPort(12345)
).Возьмем, к примеру, библиотеку, которая реализует протокол FTP. По умолчанию ожидается, что FTP будет работать через порт 21. Теперь я был бы очень раздражен, если бы мне приходилось указывать использовать порт 21 каждый раз, когда я создаю объект случайного класса FTP. Если мне нужен другой порт, позвольте мне указать.
Значения по умолчанию прекрасно подходят, когда они являются нормальными значениями.
источник
http://programmers.stackexchange.com:80/questions/?sort=newest&pagesize=50
в адресную строку?Вы, вероятно, используете раскладку клавиатуры по умолчанию с сопоставлениями клавиш по умолчанию, сопоставлениями кнопок мыши по умолчанию, браузером по умолчанию, вводом языка системы по умолчанию, загрузкой из ОС по умолчанию в загрузчике, расположенными по умолчанию меню, цветовой схемой по умолчанию, шрифтом по умолчанию ширина / высота / лицо / стиль, набор символов по умолчанию, разрешение монитора по умолчанию, по умолчанию ... вы поняли идею.
Но, если серьезно, я думаю, что у вас проблемы не с настройками по умолчанию, а с чем-то другим. Поведение по умолчанию не маскирует ошибки. В большинстве случаев ваш код все равно будет работать в обычных условиях, независимо от того, установлены ли значения по умолчанию. Необработанные крайние случаи - это то, чего вы хотите избежать, независимо от того (когда, по-видимому, посредством адекватного и надлежащего тестирования), когда меняются значения по умолчанию или случается необычный сценарий.
Кроме того, обработка исключений «ловить все», возможно, является недостатком дизайна, а не тем, что вы можете назвать «по умолчанию».
источник
TODO: or TEMP:
в списке задач. Если я когда-нибудь выберу угол для развития, я постараюсь быть предельно осторожным, чтобы убедиться, что я поместил туда TODO - тогда, время от времени, я сделаю «найти все», чтобы вернуться и убедиться, ничего из этого не входит в какие-либо важные сборки.Значения по умолчанию следует использовать, когда они спасают пользователя или разработчика от выполнения повторяющихся задач. Они никогда не должны использоваться для маскировки ошибок или исключений. Использовать их для предотвращения ошибок - неплохая практика, но только до тех пор, пока предупреждение не маскирует что-то плохое. Значения по умолчанию являются инструментом, как и все остальное. При правильном использовании они могут сэкономить вам много головной боли и времени. При неправильном использовании они могут разрушить весь дом.
источник
Основной причиной проблем, которые вы цитируете, являются не значения по умолчанию как таковые, а проблемы интеграции из-за изменения контрактов интерфейса, недопонимания интерпретации и / или неверных допущений. В основном все эти (конкретные примеры) кажутся результатом неправильного взаимодействия - между клиентом и разработчиком или между разными разработчиками / командами. Справедливо, эти проблемы могут проявляться как недопустимые значения по умолчанию, но также и в бесчисленном количестве других форм.
Обработайте основную причину, а не симптом.
Также обратите внимание, что, как другие отмечали на отличных примерах, значения по умолчанию, если их использовать с умом, могут значительно облегчить жизнь пользователям. И это в конечном итоге наша цель, не так ли?
источник
Значения по умолчанию, которые не являются частью протокола / соглашения о связи, являются злыми. Под «не частью» я подразумеваю, что они не задокументированы там, где протокол строгий, или они просто не ожидаемы, где протокол свободен.
Если значение по умолчанию задокументировано / ожидаемо, оно все равно может быть злым, но оно также может спасти жизнь. Это зависит от области домена. Это очень часто, когда они могут быть очень опасными (например, стандартная дозировка лекарств, этаж лифта по умолчанию, направление движения автомобиля по умолчанию), и иногда это может быть опасно, если их нет (например, направление движения автомобиля по умолчанию, время встречи по умолчанию).
источник