Именование сущностей
Именование очень важно в разработке ПО. Как мы знаем, код пишется в первую очередь для людей, которые будут его читать(для программистов). Неудачное именование может существенно повысить трудозатраты на разработку или поддержку проекта из-за того, что будет тратится лишнее время на чтение кода, т.к. при плохом нейминге затруднён процесс интерпретации «что есть что в коде».
Существуют разные синтаксические формы наименования, их очень много, некоторые уже не употребляются. Вот самые употребимые в 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
в названии.
vivcogit
Тут падает желание читать дальше т.к. таких именований в JS быть не может (как и во многих других языках программирования), поскольку это будет расцениваться как: my(минус)data.
Также дальше идет предложение
Которое противоречит «самые употребимые» из предыдущего
Carduelis
Между прочим, все верно описано. Может быть сумбурно, но верно.
В век до es6 очень часто в js писали имена атрибутов через дефис.
data-id
,data-name
.И кебаб-кейс еще присутствовал в css.
А вот с приходом фреймворков типа React, кебаб-кейс уже перестал быть важным. Никому не нужны
data-attributes
. Да и CSS-in-JS стал популярным, заменивbackground-color
наbackgroundColor
.О времена, о нравы!
vivcogit
имена атрибутов — до сих пор используются, и в кебаб-кейсе, не спорю. CSS свойства тоже в кебабе. Это стандартами задано и нет смысла обсуждать, да и css все таки хоть и тесно связан с браузерным js, но не часть его. И если я правильно понял статью, то она в первую очередь про именования переменных/классов/функций, в общем сущностей из кода.
Alex_Shcherbackov Автор
Также эти кейсы можно встретить в легаси коде и много где ещё. Всё так критика должна бать обоснованной. Фраза вырванная из контекста не отражает суть повествования.
kahi4
Покажите нам примеры легаси кода с кебаб-кейсом, пожалуйста.
Это невалидный синтаксис в js, так что это автоматически не может быть плохим стилем, но в это же время и спецификация того же css, вы обязаны это использовать, и, поэтому, это не опять не может быть плохим тоном.
justhabrauser
И где тут всё верно?
За такое сразу садисьдва надо.
Alex_Shcherbackov Автор
Самые употребимые кейсы, далее я рассказал, что в js применяется верблюжий кейс, а прочие нуне не применяются, но их можно встретить в других языках, например питон.
Извините, но если вы не дочитали, то это только ваш выбор.