Перевод книги Райана Макдермота clean-code-javascript.

Плохо:
Хорошо:
Плохо:
Хорошо:
Мы будем читать код чаще, чем мы когда-нибудь напишем. Важно писать читаемый код, который легко искать. Делайте ваши имена для поиска. Такие инструменты, как buddy.js и ESLint могут помочь идентифицировать неназванные константы.
Плохо:
Хорошо:
Плохо:
Хорошо:
Явное лучше, чем неявное.
Плохо:
Хорошо:
Если ваше имя класса / объекта говорит вам что это, не повторяйте тоже при именовании его свойств и методов.
Плохо:
Хорошо:
Плохо:
Хорошо:
Оглавление:
- Введение
- Переменные
- Функции
- Классы
- Объекты и структуры данных. Асинхронность. Обработка ошибок.
- Тестирование. Форматирование. Комментарии.

Используйте значимые и произносимые имена переменных
Плохо:
const yyyymmdstr = moment().format('YYYY/MM/DD');
Хорошо:
const yearMonthDay = moment().format('YYYY/MM/DD');
Используйте один и тот же метод для того же типа переменной
Плохо:
getUserInfo(); getClientData(); getCustomerRecord();
Хорошо:
getUser();
Используйте именованные значения
Мы будем читать код чаще, чем мы когда-нибудь напишем. Важно писать читаемый код, который легко искать. Делайте ваши имена для поиска. Такие инструменты, как buddy.js и ESLint могут помочь идентифицировать неназванные константы.
Плохо:
// Что значит 86400000? setTimeout(blastOff, 86400000);
Хорошо:
// Объявляйте их как глобальные переменные. const MILLISECONDS_IN_A_DAY = 86400000; setTimeout(blastOff, MILLISECONDS_IN_A_DAY);
Используйте объясняющие переменные
Плохо:
const address = 'One Infinite Loop, Cupertino 95014'; const cityZipCodeRegex = /^[^,\\]+[,\\\s]+(.+?)\s*(\d{5})?$/; saveCityZipCode( address.match(cityZipCodeRegex)[1], address.match(cityZipCodeRegex)[2] );
Хорошо:
const address = 'One Infinite Loop, Cupertino 95014'; const cityZipCodeRegex = /^[^,\\]+[,\\\s]+(.+?)\s*(\d{5})?$/; const [, city, zipCode] = address.match(cityZipCodeRegex) || []; saveCityZipCode(city, zipCode);
Используйте очеловеченные названия
Явное лучше, чем неявное.
Плохо:
const locations = ['Austin', 'New York', 'San Francisco']; locations.forEach((l) => { doStuff(); doSomeOtherStuff(); // ... // ... // ... // Что значит `l`? dispatch(l); });
Хорошо:
const locations = ['Austin', 'New York', 'San Francisco']; locations.forEach((location) => { doStuff(); doSomeOtherStuff(); // ... // ... // ... dispatch(location); });
Не добавляйте ненужный контекст
Если ваше имя класса / объекта говорит вам что это, не повторяйте тоже при именовании его свойств и методов.
Плохо:
const car = { carMake: 'Honda', carModel: 'Accord', carColor: 'Blue' }; function paintCar(car) { car.carColor = 'Red'; }
Хорошо:
const car = { make: 'Honda', model: 'Accord', color: 'Blue' }; function paintCar(car) { car.color = 'Red'; }
Используйте условия по умолчанию вместо коротких замыканий или условных выражений
Плохо:
function createMicrobrewery(name) { const breweryName = name || 'Hipster Brew Co.'; // ... }
Хорошо:
function createMicrobrewery(breweryName = 'Hipster Brew Co.') { // ... }