Как называть переменные и функции, чтобы вас уважали бывалые программисты
Если вы опытный разработчик, покажите эту статью начинающим.
Зачем как-то по-особому называть переменные и функции
Вам по-любому придётся как-то назвать переменные и функции. С точки зрения языков программирования, переменные могут быть почти любыми: хоть a, b и c, хоть SuperImportantVariable3000. То же с функциями: они могут быть суперкороткими типа yo(), а могут быть невероятно замороченными вроде getNewPageNumberAndNavigateToThatPage(). Как скажете — так и будет. Тем более что современные текстовые редакторы делают автоподстановку всех названий, так что вам даже не придётся их запоминать.
Но есть три момента:
Как называть переменные
Когда начинаешь писать код, у тебя простые программы, к которым нужны простые переменные: screen, score, text и так далее. Потом проекты становятся сложнее, и переменные нужны всё более сложные: totalScore, totalScoreBefore, totalScoreAfter, totalScoreMaxProgressiveLimit и тому подобные. Тут надо остановиться и подумать вот о чём.
Чем длиннее название переменной, тем тяжелее её набрать без ошибок. Спасает автоподстановка, но если её нет — почти наверняка ваш код не полетит из-за опечатки.
Если вы пишете на JavaScript, то будет ещё хуже: так как он генерирует переменные на ходу, ошибка в переменной totalScoreMaxProgresLimit у него не вызовет подозрений. Он создаст новый элемент с этим названием, и у вас будут две переменные — одна правильная, другая неправильная. Программа запустится, но работать будет непредсказуемо.
Поэтому стремитесь выбирать короткие названия переменных, которые при этом понятны без глубокого вникания. Например, totalScore — итоговый счёт в игре, maxWidth — максимальная ширина. Если есть необходимость хранить много переменных на разных полочках, в группах или еще какими-то пачками, изучите понятия объектов и классов в JavaScript — это то, что вам нужно.
Как называть функции
Функция — это подпрограмма внутри вашей программы, которую вы часто используете. Например, можно написать функцию getNumber(), которая будет выдавать случайное число в нужном вам диапазоне. Или сказать setTimer() — и где-то внутри программы установится таймер, который выполнит то, что необходимо, по завершении отсчёта времени.
Функция может просто сделать свою работу, а может вернуть при этом какое-то значение, переменную, массив или объект. Например, можно дать подпрограмме строку текста, написать алгоритм перевода на иностранный язык, и она будет возвращать переведённый текст.
У функций тоже могут быть какие угодно названия. Но обычно они будут примерно такими:
Вы заметите, что из названия функции можно понять, что она сделает и сообщит ли какой-то результат. Например, getScore() вернёт счёт игры, setScore() задаст счёт игры и ничего не вернёт, а clearScore() обнулит счёт игры и тоже ничего не вернёт.
А что с заглавными буквами?
В программировании есть два подхода к оформлению функций и переменных: camelCase и snake_case.
В camelCase переменные из нескольких слов соединяются без пробела, все новые слова пишутся с заглавной: getMoney, renderToFrame, removeFromBase и т. д. Этот подход рекомендуется в JavaScript. Обратите внимание: названия переменных и функций в JavaScript чувствительны к заглавным, то есть переменные getmoney и getMoney — это разные переменные.
Snake_case — это когда слова склеиваются нижним подчеркиванием. Это чаще используют в классах CSS. Примеры: header_marginal, form_success.
Выбирайте тот подход, который характерен для выбранного вами языка. Помните, что потом ваш код будут читать другие люди, и видеть необычно названные функции и переменные им будет тяжеловато.
Как не надо называть ни переменные, ни функции
Программисты не советуют называть переменные и функции креативно, например crazyUnicorn или wonderfulWorld(). Из названий этих функций непонятно, что они делают, возвращают ли они что-то и вообще зачем нужны.
Но, например, unicornCount — нормальная переменная с количеством единорогов. А initWorld() — функция, которая создаёт мир компьютерной игры.
Не называйте функции и переменные словами function или variable. MyVar и superFunction() — плохие варианты, потому что вы сами же через две недели забудете, что эти штуки делают.
Лучше не называть функции и переменные по-русски типа solnce или KYCb() — забудете потом, как они правильно пишутся. А когда ваша программа станет международно признанной, разработчики поблагодарят вас. При этом: если ваша функция делает «кусь», чтобы это ни значило, ее можно назвать bite() или getPiece().
Не делайте названия слишком секретными: переменные p, m, t, z или функция hm() — это слишком коротко. Исключение — когда вы пишете циклы: там используются переменные типа i, n, p — с их помощью считают, сколько раз цикл уже отработал. Но эти переменные создались, исполнили свою роль и уничтожились сразу после закрытия цикла, больше к ним не обращаются.
Как правильно называть переменные
Переменные нужны для хранения информации. Это своеобразная «коробка» для данных с уникальным именем. Туда можно положить любое значение и потом менять его сколько угодно раз. Важно назвать переменные так, чтобы даже через несколько месяцев, понять, что и как обозначается в коде. Разберёмся, как именовать переменные в JavaScript и PHP.
Базовые правила
Без них вы просто не сможете создать переменную.
Называйте переменную по правилам именования языка
В PHP переменные создаются с помощью символа доллара в начале имени.
Все правила вы найдёте в документации к языку: для JavaSrcipt — это MDN; для PHP — php.net.
Не используйте зарезервированные имена
Это имена, которые уже выполняют в языке конкретные функции. Если назвать переменную зарезервированным именем, вы получите синтаксическую ошибку:
Условные правила
Соблюдение этих правил не обязательно. Но они помогут сделать код более понятным для вас самих и других разработчиков.
Понятные имена
Перепишем код, используя хорошее именование и получим функцию, считающую длину окружности.
Единый стиль написания
Есть два основных принципа написания многословных переменных. Не смешивайте их в одном скрипте:
Общепринятые подходы
В сообществе устоялись правила, относящиеся к большинству языков. Их нужно знать, чтобы писать код, понятный другим разработчикам. Вот так принято называть переменные в зависимости от содержимого:
Использование этих правил сделает ваш код намного понятнее.
Если хотите разобраться с переменными, операциями, типами данных и написать программу, пройдите бесплатно первую главу интерактивного курса «Основы JavaScript».
Практическое руководство по именованию классов, функций и переменных
В компьютерном программировании соглашение об именах — набор правил для выбора последовательности символов, которая будет использоваться для идентификаторов, которые обозначают переменные, типы, функции и другие объекты в исходном коде и документации, — «Википедия»
Придумывать названия сложно!
В этой статье мы сосредоточимся на методе именования (P)A/HC/LC для того, чтобы улучшить читаемость кода. Эти рекомендации можно применить к любому языку программирования, в статье для примеров кода используется JavaScript.
Что значит (P)A/HC/LC?
В этой практике используется следующий шаблон для именования функции:
Что обозначает префикс (P)?
Префикс расширяет смысл функции.
Описывает свойство или состояние текущего контекста (обычно — логическое значение).
Указывает, имеет ли текущий контекст определенное значение или состояние (обычно — логическое значение).
Отражает положительный условный оператор (обычно — логическое значение), связанный с определенным действием.
Действие — это сердце функции
Действие — это глагольная часть имени функции. Это самая важная часть в описании того, что делает функция.
Получает доступ к данным немедленно (сокращение от getter для внутренних данных).
Безусловно присваивает переменной со значением A значение B.
Возвращает переменную к её начальному значению или состоянию.
Выполняет запрос данных, для которого требуется время (например, асинхронный запрос).
Удаляет что-то откуда-то.
Полностью стирает что-то. После операции сущность перестаёт существовать.
Создает новые данные из существующих. Обычно это применимо к строкам, объектам или функциям.
Обработка действия. Часто используется при именовании обратного вызова.
Контекст
Контекст — это область, с которой работает функция.
Функция — это часто действие с чем-то. Важно указать, какова её рабочая область или, по крайней мере, ожидаемый тип данных.
В итоге
Пять принципов именования переменных
В этом разделе мы предложим некоторые правила именования переменных, которые улучшат читаемость кода.
1. Следуйте S-I-D
Имя должно быть коротким (Short), интуитивно понятным (Intuitive) и описательным (Descriptive).
2. Избегайте сокращений
Не используйте сокращения. Обычно они только ухудшают читаемость кода. Найти короткое, описательное имя может быть сложно, но сокращения не могут быть оправданием для того, чтобы этого не делать. Например:
3. Избегайте дублирования контекста
Всегда удаляйте контекст из имени, если это не снижает его читабельность.
4. Отражайте в имени ожидаемый результат
5. Учитывайте единственное/множественное число
Как и префикс, имена переменных могут быть единственного или множественного числа в зависимости от того, имеют ли они одно значение или несколько.
6. Используйте осмысленные и произносимые имена
Пара слов об именовании переменных и методов
Правильное именование переменных, функций, методов и классов — это один важнейших признаков элегантного и чистого кода. Кода, который чётко и ясно передает намерения программиста и не терпит допущений о том, что же имелось в виду.
В этой статье мы будем говорить о коде, являющемся полной противоположностью описанного выше — о коде, к написанию которого подходили второпях, безответственно и невдумчиво. Эта статья — небольшая исповедь, ведь и мне, как и любому другому программисту, так же доводилось писать подобный код. В этом нет ничего ужасного до тех пор, пока мы понимаем, что это плохо и над этим нужно работать.
Чтобы не оставлять тех, кто ожидает более глубокого анализа, разочарованными, я оставлю в конце статьи список литературы, которую будет полезно почитать, дабы понять важность данной темы и глубже погрузиться в ее изучение, но уже опираясь на источники, написанные такими профессионалами, коими мы все стремимся когда-нибудь стать.
Не будем затягивать и, пожалуй, начнем.
Переменные
Один из самых раздражающих видов переменных — это такие переменные, что дают ложное представление о природе данных, которые они хранят. Эдакие переменные-мошенники.
Всякий раз, когда я вижу такое, я испытываю раздражение и не столько из-за сокращенной записи, сколько из-за того, что название переменной преступным образом не соответствует тому, что в этой переменной хранится.
Когда вы делаете запрос ( requests.Request ), то получаете ответ ( requests.Response ), так отразите это у себя в коде:
Давайте рассмотрим еще один пример, но теперь из Django:
Если вам очень важно указывать суффикс, то укажите хотя бы такой, который соответствует действительности:
Привязка названия переменной к типу хранящихся в ней данных — это чаще всего плохая идея, особенно когда вы работаете с динамическими языками. В случаях, когда очень нужно отметить, что объект представляет собой контейнерный тип данных, достаточно просто указать название переменной во множественном числе:
или, если вам уж совсем неймется и вы в любом случае намерены использовать суффиксы, то лучше добавить суффикс _seq (меньшее из зол), чтобы отметить, что это последовательность:
Таким образом, вы будете знать, что в переменной хранится последовательность и что по ней можно итерировать, но не будете делать предположений о прочих свойствах и методах объекта.
Еще одним видом раздражающих переменных являются переменные с сокращенными именами.
Вернемся к requests и рассмотрим этот код:
Это яркий пример совершенно неоправданного сокращения названия переменной. Это ужасная практика, и ее ужасы становятся еще более очевидны, когда такой код занимает больше 10-15 строк кода.
Конкретно в случае requests скрипя зубами можно простить подобное сокращение, когда код занимает не более 5-10 строк и записывается вот так:
Но гораздо лучше написать как есть, а именно:
Рассмотрим еще один пример:
Вы видите dict и можете захотеть сделать так:
Но вместо этого получите ошибку, ведь вас ввели в заблуждение, и поймете вы это, только если пройдете к объявлению и прочитаете весь код сверху вниз, вплоть до участка, с которого начинали прыжок к объявлению — такова цена подобных переменных.
Таким образом, когда вы указываете в названии переменной тип хранящихся в ней данных, вы по сути выступаете гарантом того, что в этой переменной в любой момент времени выполнения программы должен содержаться указанный тип данных. Зачем нам брать на себя такую ответственность, если это прямая обязанность интерпретатора или компилятора? Лучше потратить время на придумывание хорошего названия переменной, чем на попытки понять, почему переменные ведут себя не так, как вы ожидаете.
В приведенном выше примере выбор переменной достаточно неудачный, и можно было бы дать имя, точнее выражающее контекст (не нужно бояться использовать имена, относящиеся к предметной области), однако даже в этом случае можно было бы сделать этот код лучше:
или даже так, что более идиоматично:
Комментарии-кэпы
Комментарии – это то, что может как испортить ваш код, так и сделать его лучше. Хороший комментарий требует времени на обдумывание и написание, и потому чаще всего мы все сталкиваемся с отвратительными комментариями, которые не представляют собой ничего, кроме визуального мусора.
Возьмем небольшой пример из JavaScript:
Первое, что мелькает в голове, когда видишь такое — это «Спасибо, кэп!». Зачем описывать то, что и так понятно без комментария? Зачем дублировать информацию, которую нам уже рассказывает код? Этим и отличается хороший комментарий от плохого — хороший комментарий заставляет вас испытать благодарность тому, кто его написал, а плохой — лишь раздражение.
Давайте попробуем сделать этот комментарий полезным:
А еще лучше прибегнуть к более декларативному подходу и избавиться от комментария вообще:
Говоря о комментариях, нельзя не упомянуть мертвый код. Мертвый код, пожалуй, раздражает куда больше, чем бесполезные комментарии, так как вы еще и должны разбираться, был ли код закомментирован временно (для отладки каких-то частей системы) или все же разработчик просто забыл его удалить?
Как бы там ни было, мертвому коду не место в модулях и он должен быть удален! Если вдруг окажется, что это было что-то важное, то вы сможете просто откатиться к нужной версии (если, конечно, вы не программист-амиш, что не пользуется системой контроля версий).
Методы
Умное именование функций и методов — это то, что приходит только с опытом проектирования API, и потому достаточно часто можно встретить случаи, когда методы ведут себя не так, как мы ожидаем.
Рассмотрим пример с методом:
В коде мы выразили весьма однозначный вопрос: «Имеются ли у этого человека публикации?», но какой ответ мы получили?
Мы не спрашивали, какие у человека есть публикаций. Название этого метода подразумевает, что возвращаемое значение должно иметь булевый тип, а именно True или False :
А для получения постов вы можете использовать более подходящее название:
Мы часто любим называть программирование творческой деятельностью, и таковой оно в действительности и является. Однако, если вы пишете код, который можете прочитать только вы, и затем оправдываете это «творчеством», то у меня для вас плохие новости.
Список литературы для изучения вопроса
Как и обещал, оставляю список выдающейся релевантной литературы, написанной известными профессионалами в области. Большая часть приведенных ниже книг переведена на русский язык.
Как правильно пишется слово «переменная»
Источник: Орфографический академический ресурс «Академос» Института русского языка им. В.В. Виноградова РАН (словарная база 2020)
Делаем Карту слов лучше вместе
Привет! Меня зовут Лампобот, я компьютерная программа, которая помогает делать Карту слов. Я отлично умею считать, но пока плохо понимаю, как устроен ваш мир. Помоги мне разобраться!
Спасибо! Я стал чуточку лучше понимать мир эмоций.
Вопрос: богоданный — это что-то нейтральное, положительное или отрицательное?
Ассоциации к слову «переменная»
Синонимы к слову «переменная»
Предложения со словом «переменный»
Цитаты из русской классики со словом «переменная»
Сочетаемость слова «переменный»
Что (кто) бывает «переменной»
Значение слова «переменная»
Термин переменная может означать: (Википедия)
Афоризмы русских писателей со словом «переменный»
Отправить комментарий
Дополнительно
Значение слова «переменная»
Термин переменная может означать:
Предложения со словом «переменный»
Война с переменным успехом могла тянуться неделями, и нам нашли правильное применение.
Так, иногда возникает необходимость в том, чтобы изменение направления тока Iу сопровождалось изменением направления тока приёмника постоянного тока либо изменением на 180° фазы тока приёмника переменного тока.
Независимую переменную величину, с течением которой происходит движение и изменение всякой объективной реальности, мы называем временем.