Почему нельзя использовать «data» в качестве имени переменной

109

Правильно присвоенное имя переменной обеспечивает важный контекст, когда нужно быстро понять код. Даже если это пожар, дебаггинг, собеседование или помощь товарищу по команде — не нужно спрашивать, что означает users, но нужно будет спросить, что значит data. Чтобы найти хорошее имя, рекомендуем оптимизировать код для читателя. Для этого, следуйте некоторым основным правилам.

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

Используйте значимые префиксы

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

  • get, find, fetch используются для функций, возвращающих значение или Promise, которые разрешается в значение без мутации аргументов или самого себя.
  • set, update — для функций, аргументы которых могут мутировать, или callee для функций участника. Эти функции могут также возвращать обновленное значение или promise, которое разрешается в данном случае.
  • on, handle — для функций обработчиков событий. Например, onEvent передается через props в компонент, а handleEvent объявлен внутри компонента.
  • is, should, can для булевых переменных и функций с булевыми возвращаемыми значениями.

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

Используйте слова, которые добавляют смысл

В качестве примера разработчики часто называют переменные data, но давайте рассмотрим несколько значений этого слова.

  • фактическая информация (например, измерения или статистика), которую используют в качестве основы для рассуждений, обсуждений или расчетов;
  • информация в цифровой форме, которая может быть передана или обработана.

Эти определения могут относиться к любой переменной, которую мы обрабатываем. Поэтому они не дают читателю никакой информации.

Давайте рассмотрим пример исключения из этого правила:

function total(data) {
  let total = 0;
  for (let i = 0; i < data.length; i++) {
    total += data[i].value;
  }

  return total;
}

Мы знаем, что эта функция что-то вычисляет, но мы не знаем, что именно.

Исключения

Иногда переменная может содержать что угодно. Например, ответ сетевого запроса. Такие библиотеки, как axios, используют data, что является разумным именем переменной в данном контексте. Даже в этом сценарии альтернативное body передает больше смысла, и это то, что использует нативный веб API fetch в своем ответе.

Используйте полные слова

У всех людей Система 1 мозга всегда говорит идти коротким путем, чтобы быстрее закончить задание. Когда речь заходит об именах переменных, ярлыки часто означают аббревиатуры или односимвольные имена переменных.

Но давайте посмотрим на исключение из этого правила:

function totBal(accts) {
  let tot = 0;
  for (let i = 0; i < accts.length; i++) {
    tot += accts[i].bal;
  }

  return tot;
}

Мы можем немного напрячь мозг и догадаться, что accts означает accounts, а tot это total, но мы не можем обработать код с первого взгляда.

Исключения

Общепринятые сокращения воспринимаються лучше, чем их длинная форма (например, URL, API, CSS).

Не используйте «бессмыслицу»

Container и Wrapper имеют значение только по отношению к тому, что в них содержится. Проблема в том, что любой компонент, не являющийся базовым, содержит другой компонент. Вы также оказываетесь в неудобном положении, называя компоненты MyComponentContainerContainer. То же самое касается и Wrapper.

Исключения

В некоторых контекстах эта «бессмыслица» может иметь значительный смысл. Общим шаблоном в компонентах классов React является шаблон presentation/container. Container в этом случае может указывать на компонент, управляющий состоянием от имени компонента presentation — просто убедитесь, что вы последовательно используете его для этой цели.

Вопросы орфографии

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

Складывая всё вместе

Применяя все правила сразу, мы получаем следующую функцию:

function getAccountsTotalBalance(accounts) {
  let totalBalance = 0;
  for (let accountIndex = 0; accountIndex < accounts.length; accountIndex++) {
    totalBalance += accounts[accountIndex].balance;
  }

  return totalBalance;
}

Хотя вопрос использования accountIndex или i может быть спорным, остальная часть функции должна быть намного яснее. getAccountsTotalBalance полностью сообщает о намерении функции, а префикс get указывает, что это не приведет к каким-либо мутациям. Автору кода стоит приложить дополнительные усилия в обмен на пользу для читателя.

Если вас беспокоит длина строки, подумайте об использовании такого инструмента, как Prettier, для автоматического форматирования кода.

Заключение

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

Поделитесь правилами, которых вы придерживаетесь при именовании переменных, функций, классов и т.д., или дайте нам знать, если вы не согласны с каким-либо из правил в статье, и как бы вы их заменили.

Источник: dev.to

Поделитесь в соц.сетях
  • 1
  •  
  •  
  •  
  •  
  •  
  •  

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *