-
Notifications
You must be signed in to change notification settings - Fork 0
codestyle
Код в любом проекте должен выглядеть так, будто его писал один человек, неважно как много людей работали над ним
Пишутся на той же строке, в «египетском» стиле. Перед скобкой — пробел.
Если условие и код короткие, то лучше запись в одну строку без фигурных скобок.
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' )) { // ещё лучше
...
}