У меня сложилось впечатление, что теперь все согласны с тем, что эта максима была ошибкой. Но я недавно видел этот ответ, в котором есть комментарий «быть снисходительным», проголосовавший 137 раз (на сегодняшний день).
По моему мнению, снисходительность в том, что принимают браузеры, была прямой причиной беспорядка, который HTML и некоторые другие веб-стандарты имели несколько лет назад, и только недавно начали правильно выкристаллизовываться из этого беспорядка. То, как я это вижу, проявление снисхождения к тому, что вы принимаете , приведет к этому.
Вторая часть максима - «молча отбросить ошибочный ввод, не возвращая сообщение об ошибке, если это не требуется спецификацией» , и это кажется пограничным оскорблением. Любой программист, который молча ударился головой о стену, когда что-то не получится, поймет, что я имею в виду.
Итак, я совершенно не прав по этому поводу? Должна ли моя программа быть снисходительной в том, что она принимает и молча глотать ошибки? Или я неправильно понимаю, что это должно означать?
В первоначальном вопросе говорилось «программа», и я согласен с этим. Для программ может иметь смысл быть снисходительным. Однако я действительно имел в виду API-интерфейсы: интерфейсы, открытые другим программам , а не людям. HTTP является примером. Протокол является интерфейсом, который используют только другие программы. Люди никогда не сообщают даты, которые входят в заголовки, например «If-Modified-Since».
Итак, вопрос заключается в следующем: должен ли сервер, реализующий стандарт, быть снисходительным и разрешать даты в нескольких других форматах, в дополнение к тому, который фактически требуется стандартом? Я считаю, что «быть снисходительным» должно относиться к этой ситуации, а не к человеческим интерфейсам.
Если сервер снисходительный, это может показаться общим улучшением, но я думаю, что на практике это приводит только к реализации клиента, которая в конечном итоге полагается на снисходительность и, таким образом, не может работать с другим сервером, который снисходителен немного другими способами.
Итак, должен ли сервер, демонстрирующий какой-либо API, быть снисходительным или это очень плохая идея?
Теперь перейдем к мягкой обработке пользовательского ввода. Рассмотрим YouTrack (программное обеспечение для отслеживания ошибок). Он использует язык для ввода текста, который напоминает Markdown. За исключением того, что это "снисходительно". Например, написание
- foo
- bar
- baz
это не документированный способ создания маркированного списка, и все это работало. Следовательно, он часто использовался в нашем внутреннем багтрекере. Выходит следующая версия, и эта снисходительная функция начинает работать немного по-другому, разбивая кучу списков, которые (не) использовали эту (не) функцию. Разумеется, документированный способ создания маркированных списков все еще работает.
Итак, должно ли мое программное обеспечение быть снисходительным к тому, что вводит пользователь ?