Code review в JavaScript: что проверять и как давать обратную связь

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Code review в JavaScript: что проверять и как давать обратную связь для начинающих

Code review (или ревью кода) — это процесс проверки программного кода одним или несколькими разработчиками до того, как он попадёт в основную ветку проекта. Для новичков эта процедура часто кажется пугающей: «А вдруг я пропущу баг?», «Как сказать коллеге, что его код плохой, не испортив отношения?».

В этой статье мы разберём, на что обращать внимание при code review в JavaScript (включая Node.js), и как давать обратную связь так, чтобы она была полезной, а не обидной. Материал рассчитан на начинающих разработчиков, которые только начинают участвовать в ревью.

Что проверять в JavaScript-коде: чек-лист для начинающих

Чтобы ревью было структурированным, разделим проверку на несколько ключевых блоков. Не пытайтесь охватить всё сразу — начните с наиболее критичных пунктов.

1. Функциональность и логика

Прежде всего убедитесь, что код решает поставленную задачу. Запустите его локально (если это возможно) или мысленно пройдите по всем веткам выполнения. Вот типичные вопросы:

  • Правильно ли обрабатываются граничные случаи (пустой массив, null, undefined)?
  • Нет ли «магических чисел» (чисел без пояснения, например if (x > 86400) вместо const ONE_DAY_IN_SECONDS = 86400)?
  • Корректно ли работает асинхронный код (Promise, async/await)?
// Плохо: магическое число
if (user.lastLogin < Date.now() - 86400000) { ... }

// Хорошо: константа с именем
const ONE_DAY_MS = 24 * 60 * 60 * 1000;
if (user.lastLogin < Date.now() - ONE_DAY_MS) { ... }

2. Стиль кода и форматирование

Хотя многие проекты используют Prettier и ESLint, вручную стоит проверить:

  • Соблюдение единого стиля (отступы, кавычки, точки с запятой).
  • Правильные именования переменных, функций и классов (camelCase для переменных, PascalCase для классов).
  • Отсутствие закомментированного кода — он только засоряет файл.
// Плохо: неинформативное имя
const d = new Date();
const arr = getData(d);

// Хорошо: имя описывает суть
const currentDate = new Date();
const usersData = fetchUsersData(currentDate);

3. Производительность и безопасность

Для Node.js особенно важны:

  • Избегание блокирующих операций в основном потоке (синхронное чтение файлов, тяжёлые циклы).
  • Проверка на утечки памяти (например, забытые таймеры или слушатели событий).
  • Валидация пользовательского ввода (защита от SQL-инъекций, XSS).
// Плохо: синхронное чтение блокирует Event Loop
const data = fs.readFileSync('bigfile.json', 'utf8');

// Хорошо: асинхронное чтение
const data = await fs.promises.readFile('bigfile.json', 'utf8');

Как давать обратную связь: принципы конструктивного ревью

Теперь, когда вы знаете, что проверять, разберём главный навык code review — умение доносить замечания. Ваша цель — улучшить код, а не самоутвердиться за счёт автора.

1. Будьте конкретны и аргументированы

Вместо «Этот код плохой» напишите: «Здесь есть потенциальная проблема с производительностью: вызов Array.find() в цикле даёт сложность O(n²). Давай заменим на Map». Автор поймёт, что именно не так и как исправить.

2. Используйте «Я-сообщения» и задавайте вопросы

Формулировки вроде «Я не уверен, что этот код обработает случай с пустым массивом. Можем добавить проверку?» звучат мягче, чем «Ты забыл обработать пустой массив». Это снижает защитную реакцию и стимулирует диалог.

3. Хвалите хорошие решения

Code review — это не только критика. Если вы видите элегантное решение или отличную архитектуру, обязательно отметьте это. Например: «Отличная идея вынести валидацию в отдельный модуль! Это сильно упростит тестирование». Положительная обратная связь мотивирует.

Практический пример: ревью кода для Node.js

Рассмотрим небольшой фрагмент кода и напишем к нему конструктивные комментарии.

// Исходный код (плохой пример)
app.get('/user/:id', (req, res) => {
  const id = req.params.id;
  db.query('SELECT * FROM users WHERE id = ' + id, (err, result) => {
    if (err) {
      res.status(500).send('Error');
    } else {
      res.json(result);
    }
  });
});

Комментарии к ревью:

  • Безопасность: Прямая конкатенация в SQL-запросе — это SQL-инъекция. Нужно использовать параметризованный запрос: db.query('SELECT * FROM users WHERE id = ?', [id], callback).
  • Обработка ошибок: Всегда возвращать статус 500 без логирования — плохая практика. Добавьте console.error(err) или передайте ошибку в middleware.
  • Async/await: Современный Node.js позволяет использовать async/await для более читаемого кода.
// Исправленный код (хороший пример)
app.get('/user/:id', async (req, res) => {
  try {
    const { id } = req.params;
    const result = await db.query('SELECT * FROM users WHERE id = ?', [id]);
    res.json(result);
  } catch (error) {
    console.error('Database error:', error);
    res.status(500).json({ error: 'Internal server error' });
  }
});

Заключение

Code review — это не экзамен и не суд. Это инструмент для совместного улучшения кода и обмена опытом. Для начинающего разработчика лучшая стратегия — сначала проверять только очевидные ошибки (безопасность, логика, стиль), а затем постепенно расширять свой кругозор

Блоги

Рекомендаций по книгам