Skip to content
XaoZlo edited this page Dec 3, 2015 · 1 revision

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

Фигурные скобки

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

if (n < 0) { alert('Значение ' + n + ' не поддерживается!'); } // плохо

if (n === 0) alert('Имеем особый случай'); // нормально

if (n > 0) { // хорошо
  alert(n + ' - отличный выбор!');
}

Если if / else / for / while / try разделяются пробелом, читабельность улучшается

for ( prop in object ) {
  // выражения
}

Отступы

Отступы нужны двух типов

Горизонтальный отступ, при вложенности — два пробела

Используются именно пробелы, т.к. они позволяют сделать более гибкие «конфигурации отступов», чем символ «Tab». Например, выровнять аргументы относительно открывающей скобки:

show("Строки" +
     " выровнены" +
     " строго" +
     " одна под другой");
  • Не используйте знак табуляции - Рекомендуется выставить размер отступа в редакторе на 2 символа пробела
  • Всегда работайте со включенной опцией "показать скрытое" и удаляйте пробелы в конце строк

Вертикальный отступ, для лучшей разбивки кода — перевод строки.

Используется, чтобы разделить логические блоки внутри одной функции.
Вставляйте дополнительный перевод строки туда, где это сделает код более читаемым. Не должно быть более 9 строк кода подряд без вертикального отступа.

Точка с запятой

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

Именование

Общее правило:

  • Имя переменной — существительное.
  • Имя функции — глагол или начинается с глагола. Бывает, что имена для краткости делают существительными, но глаголы понятнее.

Для имён используется английский язык (не транслит) и верблюжья (camelCase) нотация, переменная должна полно описывать представляемую сущность.

Использование только одного var на одну область видимости улучшает читабельность и упорядочивает блок объявления переменных

// Неправильно
var foo = "";
var bar = "";
var qux;

// Правильно
var foo = "",
    bar = "",
    qux;

Название переменной не должно быть слишком кратким, чтобы вводить в заблуждение людей, но в это же время оно не должно быть и слишком длинным, так как это некрасиво с точки зрения чтения кода.
Это нормально, когда небольшой цикл из 1-3 строк имеет индекс под названием i,j или k. Но если тело цикла заметно больше, то лучше давать индексам осмысленные имена.

Метод должен служить одной четко определенной цели, которая должна быть полностью отражена в его имени
Следует использовать парные антонимы для методов, выполняющих парные (противоположные) действия: open / close, show / hide, add / remove, insert / delete.

  • Метод должен быть документирован
  • Метод не должен изменять глобальные переменные
  • Параметры следует упорядочивать по степени их важности либо порядку их использования внутри метода
  • Не должно быть неиспользуемых «брошенных» переменных и параметров

Комментарии

Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете
Стив Макконнелл

  • Приоритетная задача каждого программиста — это актуальные комментарии, грамотные, и понятные другим
  • Не нужно комментировать очевидные вещи.
  • Комментарий должен дополнять код, а не перефразировать его.
  • Комментарий должен быть коротким и четким.
  • Хорошая практика — в начале файла кратко описать его назначение.
  • Новые классы и функции — желательно описать, какие и от куда попадают входящие данные и какая цель.
  • Дабы избавится от лишних комментариев кода, можно выбирать название классов, функций, объектов и т.п. по назначению.
  • В комментарии описывайте не процедурную логику с точки зрения программы, а семантику или бизнес логику.

«Далее мы перебираем массив такой-то, суммируем поле price у элементов с state=1» — плохо
«Далее мы суммируем цены актуальных товаров на складе» — хорошо

this.countSum( warehouse.getActualItems() ); // ещё лучше

«Возвращем false если 8-й бит поля User->Rights равен нулю» — плохо
«Дальнейшие действия доступны только администратору» — хорошо

if (user.hasRole( 'admin' )) { // ещё лучше
  ...
}