https://habr.com/ru/post/488378/Привет, Хабр! Решил затронуть тему наименования сущностей в Javascript. По работе довольно много взаимодействую со стажёрами и насмотрелся всякого. Вот и подумал, что было бы неплохо собрать в одной небольшой заметке принятые на сегодняшний день правила наименования сущностей в JavaScript сообществе. Возможно собрал не все, поэтому буду признателен если дополните меня в комментариях.
Именование сущностей
Именование очень важно в разработке ПО. Как мы знаем, код пишется в первую очередь
для людей, которые будут его читать(для программистов). Неудачное именование может существенно повысить трудозатраты на разработку или поддержку проекта из-за того, что будет тратится лишнее время на чтение кода, т.к. при плохом нейминге затруднён процесс интерпретации «что есть что в коде».
Существуют разные синтаксические формы наименования, их очень много, некоторые уже не употребляются. Вот самые употребимые в js:
- Верблюжья нотация (CamelCase): MyClass
- Змеиная нотация (snake_case): my_const
- Шашлычная нотация (kebab-case): my-data
При выборе кейса важно учитывать принятый на текущий момент стандарт. В js на сегодняшний день
snake_case и
kebab-case не приняты, но их можно встретить например на
Python или
Ruby.
Однобуквенные идентификаторы
В институтах очень часто используют
однбуквенные идентификаторы в коде. Я вижу этот стиль кодирования у половины ребят, которые приходят после ВУЗов. Это очень порочная практика. Название должно наглядно описывать сущность. В наше время использовать однобуквенные идентификаторы — признак дурного тона. Исключениями могут быть счётчики и индексы, т.е. ситуации, где и одной буквы более чем достаточно для передачи сути сущности.
Транслит в имени
Также очень популярно среди студентов использовать транслит. Разумеется это тоже признак дурного тона и плохого кода. Никакого транслита в нейминге быть не должно, т.к. общепринятым языком в программировании является английский. Разрабатывая код мы должны использовать международный язык, который знают профессионалы в любой стране. Русский транслит к таковым не относится.
Именование переменных и классов
Переменные именуются в
lower camelCase
:
const maxCount = 10;
Классы именуются в
CamelCase
:
class EnumerableCollection {
//some code
}
Действия
Очень важно для нейминга действий(например, функций) использовать глаголы. Нужно выбирать такой глагол. который соответствует типу действия.
Например:
const checkNumberIsEven = (number) => (number % 2 === 0);
checkNumberIsEven
— хорошее название. сразу понятно, что функция проверяет число на чётность.
Также хорошее название
isEven
— если эта функция лежит в каком — нибудь /helpers/number.js, то даже такого короткого названия более чем достаточно, т.к. сама директория указывает нам на то, что в неё лежат функции по работе с числами.(но даже тут можно использовать первый вариант, т.к. в файле, который использует данную функцию, может быт довольно много кода, а вызов быть где нибудь в середине. )
Функции далеко не всегда являются действиями, это тоже важно понимать.
Например,
const arifmeticalProgression = (start, depth, maxLength = 10) => {
const progression = [start];
const iter = (acc) => {
if (acc.length >= maxLength) {
return acc;
}
const newIndex = acc.length;
const newItem = start + newIndex * depth;
const newProgresion = [].concat(acc, newItem);
return iter(newProgresion);
};
return iter(progression);
};
Эта функция генерирует нам арифметическую прогрессию, но действием не является, т.к. в виду своей декларативности считается определение арифметической прогрессии. Важно уметь различать этот момент. Сюда же относятся функции определяющие константы.
const defaultCollection = () => ([]);
Предикаты
Выше мы обсуждали функцию
const checkNumberIsEven = (number) => (number % 2 === 0);
Такой тип функций называют предикатами.
Предикат — утверждение о чём либо. Так называют функции выполняющиеся проверки «сущность есть что-то».
Предикат в программирование всегда возвращает булевое значение.
Как правило предикаты именуются через форму третьего лица единственого числа английского вспомогательного глагола
to be, т.е.
is.
const isEven = (number) => (number % 2 === 0);
Некоторые предикаты определяют
вхождение(наличие) искомого элемента(свойства или метода или item'a) в сущности. Такие предикаты. как правило начинаются с английского глагола
has(3е лицо единственное число глагола
to have). Например, безопасная форма
Object.prototype.hasOwnProperty
может выглядеть так:
const hasProp = (obj, key) => (Object.prototype.hasOwnProperty.call(obj, key));
Если сущность представляет собой количество чего-либо, то стоит использовать слово
count
в названии.