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

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

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

Как человек, который десятилетиями «давал названия вещам», я могу с уверенностью сказать, что эта критическая задача никогда не становится легче.

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

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

Например, я обнаружил, что хочу писать код, похожий на этот

const uppercase = (value) => value.toUpperCase();
["red", "green", "blue"].map(uppercase);

против этого:

const uppercase = (value) => value.toUpperCase();
["red", "green", "blue"].map((color) => uppercase(color));

(удаляет лишнее имя color)

Я часто редактирую код с «дополнительными именами», чтобы сделать его более кратким. Почти никогда не наоборот.

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

["small", "medium", "large"].map((color) => uppercase(color));
["small", "medium", "large"].map(uppercase);

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

Конечно, та же проблема существует с любым именем

const uppercase = (value) => value.toLowerCase();
["red", "green", "blue"].map(uppercase);

Когда я что-то называю, я должен быть очень осторожным, чтобы имя согласовывалось с тем, что читатель думал, что это имя означает .

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

Было бы неплохо вообще избавиться от имён.

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

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

Именование сложно

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

При наименовании это в определенной степени зависит от того, кто является целевой аудиторией и что, по их мнению, означает или представляет имя.

Когда я говорю foo в паре с bar, эти имена представляют что-то конкретное для одной аудитории и могут быть бессмысленными для другой.

Когда я говорю map, это становится сложнее, потому что это слово имеет много значений в множестве контекстов для многих аудиторий.

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

Стандартные имена почти невидимы

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

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

Это помогает использовать «стандартное» имя для чего-либо, снимая нагрузку как с автора, так и с читателя.

Цикл for, не использующий i в качестве счетчика, был бы сложнее для большинства читателей, использующих си-подобный язык 20-го века, для чтения.

Я считаю, что стандартные имена лучше, чем «безымянные».

Вывод

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

«Не называть» — ценный инструмент в наборе инструментов для именования.

Я отмечаю, что неназывание — это уловка, которую используют многие строители мира в письменной форме.

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

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

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

Первоначально опубликовано на https://github.com.