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

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

— Оксфордский словарь английского языка

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

Конструкторы и функции могут иметь варианты перегрузки с меньшим количеством параметров или без них. Компоненты могут определять параметры по умолчанию. Библиотеки и платформы могут включать конфигурацию по умолчанию. Серверы и инструменты поставляются с встроенной конфигурацией по умолчанию или в файле по умолчанию.

Почему значения по умолчанию

Значения по умолчанию позволяют кому-то использовать вещь без указания значения параметра — в коде или в конфигурации.

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

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

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

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

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

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

По умолчанию или не по умолчанию

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

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

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

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

Параметр добавляется для новой версии существующего программного обеспечения? Если да, вероятно, должно быть значение по умолчанию. Это упрощает переход на новую версию, поскольку существующий код/конфигурация потребителей не нуждается в каких-либо модификациях.

Значение по умолчанию

Как уже упоминалось, значение по умолчанию должно подходить для большинства случаев использования. Но это не все.

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

Это не должно быть неудивительно. Это принцип наименьшего удивления.

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

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

Делаем настройки по умолчанию видимыми

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

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

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

По умолчанию для размышлений

Имея в виду вышеизложенное, вы можете рассмотреть некоторые значения по умолчанию из популярного (и другого) программного обеспечения:

  • HTTP-сервер Apache: прослушивает порт 80
  • Пул потоков Tomcat: максимальный размер 200
  • Конечные точки управления Spring Boot: большинство из них не доступны через HTTP
  • Конструктор Java ReentrantLock(): не использует справедливую (дорогую) политику заказа
  • HTML DOM API addEventListener(type, listener): регистрирует события в фазе всплытия
  • Центр картографических проекций D3: в области 960x500px.
  • Маршрутизатор Angular: использует URL-адрес истории HTML5 pushState() API
  • Конструктор Moment.js, вызываемый с помощью undefined: возвращает момент, представляющий текущее время
  • Библиотека: ведет себя по умолчанию, если только не обнаружит, что находится в производственной среде.
  • Компонент сетки данных: форматирует числовые столбцы до двух знаков после запятой.
  • Инструменты сборки, которые используют библиотеку разрешения конфигурации browserslist: использует конфигурацию по умолчанию, если конфигурация не может быть найдена.

Вывод

Значения по умолчанию могут улучшить или ухудшить ситуацию благодаря их наличию или отсутствию и выбранным значениям.

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