Pull to refresh

Кратко о нейминге в JS

Reading time3 min
Views31K
Привет, Хабр! Решил затронуть тему наименования сущностей в 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 в названии.
Tags:
Hubs:
Total votes 17: ↑5 and ↓12-4
Comments31

Articles