воскресенье, 18 июля 2010 г.

Почему диалог Пуск/Выполнить исправляет введённую команду, а ключ реестра Run - нет?

Это перевод Why does the Run dialog autocorrect but not the Run key? Автор: Реймонд Чен.

В своём комментарии, Aswin Gunawan спросил, почему диалог Пуск/Выполнить выполняет автоисправление команды, а ключ реестра Run - нет? (перевод поста)

Потому что первый - это контрол для конечного пользователя, а второй - это программный интерфейс.

Конечные пользователи не должны разбираться в том, как работают компьютеры. Они хотят и часто ожидают, что компьютеры помогают им выполнять их задачи. В частности, в связи с вводом текста это означает проверку грамматики, угадывание пропущенной информации - и вообще "делать, что я имел ввиду". К примеру, web-браузеры не требуют от вас ввода "http://" или "ftp://" в начале адреса; они пытаются угадать, к чему вы хотите подключиться, в зависимости от контекста вводимых данных. Конечно же, иногда у них это не получается - к примеру, когда вы хотите подключиться по HTTP к сайту, имя которого начинается с "ftp.". В этом случае вы можете повторить запрос, дополнив его нужной информацией, так что компьютеру не нужно будет угадывать.

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

Компьютерные программы предпочитают предсказуемость. Автоисправление и угадывание по контексту не являются предсказуемыми. Представьте, насколько тяжелее стало бы писать код, если бы поведение кода основывалось на такой нечёткой логике как "ну, здесь нет файла, который ты просишь меня открыть, но вот в этой папке есть файл с похожим именем, так что я открою его" или "у этого класса нет поля 'current', но вот у того класса это поле есть, так что я думаю, что ты имел в виду тот класс, а не этот".

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

Комментариев нет:

Отправить комментарий

Можно использовать некоторые HTML-теги, например:

<b>Жирный</b>
<i>Курсив</i>
<a href="http://www.example.com/">Ссылка</a>

Вам необязательно регистрироваться для комментирования - для этого просто выберите из списка "Анонимный" (для анонимного комментария) или "Имя/URL" (для указания вашего имени и ссылки на сайт). Все прочие варианты потребуют от вас входа в вашу учётку (поддерживается OpenID).

Пожалуйста, по возможности используйте "Имя/URL" вместо "Анонимный". URL можно просто не указывать.

Ваше сообщение может быть помечено как спам спам-фильтром - не волнуйтесь, оно появится после проверки администратором.