Clean Code in JavaScript: Principles of Writing Clean Code

Online Python Trainer for Beginners

Learn Python easily without overwhelming theory. Solve practical tasks with automatic checking, get hints in Russian, and write code directly in your browser — no installation required.

Start Course

Clean Code на JavaScript: принципы и примеры



Чистый код (Clean Code) — это не просто модный термин, а фундаментальный подход к разработке, который делает программу понятной, легко поддерживаемой и расширяемой. В мире JavaScript и Node.js, где проекты быстро растут и требуют частых изменений, принципы Clean Code становятся особенно важными. В этой статье мы разберем ключевые практики написания чистого кода на JavaScript с конкретными примерами, которые помогут вам улучшить качество ваших проектов.



1. Правильное именование переменных и функций



Имя переменной или функции должно отвечать на вопросы "что это?" и "что оно делает?". Избегайте однобуквенных имен (кроме счетчиков циклов) и сокращений, которые неочевидны.



Плохой пример:

const d = new Date();const a = [];const fn = (x, y) => x + y;


Хороший пример:

const currentDate = new Date();const userList = [];const calculateSum = (firstNumber, secondNumber) => firstNumber + secondNumber;


Правила именования:

  • Используйте camelCase для переменных и функций.
  • Для булевых значений применяйте префиксы: is, has, should (например, isActive, hasPermission).
  • Функции называйте глаголами: getUser, sendEmail, validateInput.
  • Избегайте сокращений: usr → user, conf → configuration.


2. Маленькие и однозадачные функции



Каждая функция должна выполнять ровно одну задачу. Если функция делает больше одного действия, ее нужно разбить на несколько. Это улучшает читаемость и тестируемость.



Плохой пример (функция делает 3 дела сразу):

function processUserData(user) {  // Валидация  if (!user.email || !user.password) {    throw new Error('Invalid data');  }  // Форматирование  const formattedUser = {    email: user.email.toLowerCase(),    password: hashPassword(user.password)  };  // Сохранение в БД  db.save(formattedUser);  return formattedUser;}


Хороший пример (разделение на отдельные функции):

function validateUserInput(user) {  if (!user.email || !user.password) {    throw new Error('Email and password are required');  }}

function formatUserData(user) { return { email: user.email.toLowerCase(), password: hashPassword(user.password) };}

function saveUserToDatabase(user) { return db.save(user);}

function processUserData(user) { validateUserInput(user); const formattedUser = formatUserData(user); return saveUserToDatabase(formattedUser);}


Такой подход делает код самодокументируемым и упрощает поиск ошибок.



3. Обработка ошибок и граничные случаи



Чистый код обязательно включает обработку ошибок и предусматривает граничные случаи. Не оставляйте места для неожиданных сбоев.



Плохой пример (нет обработки ошибок):

function getUserAge(user) {  return user.age; // Если user или user.age undefined — ошибка}


Хороший пример (с защитой):

function getUserAge(user) {  if (!user || typeof user.age !== 'number') {    return null; // или throw new Error('Invalid user data')  }  return user.age;}


Принципы обработки ошибок:

  • Используйте try/catch для асинхронных операций (особенно в Node.js).
  • Создавайте собственные классы ошибок для разных ситуаций.
  • Не глотайте ошибки молча — логируйте их или пробрасывайте дальше.


class ValidationError extends Error {  constructor(message)                

Blogs

Book Recommendations