Codestyle
🧐 Да или нет?

Быть или не быть, вот в чем вопрос 🧐

Частельно сталкиваюсь с мнением из начала 2010-х годов, что все boolean занчения должны быть в виде is_* или has_*. Это в корне неверно, и в этой статье я попытаюсь объяснить почему.

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

Если мы обратимся к английскому языку, то увидим, что is и has - это глаголы, которые описывают действие. Например, is - это является, а has - это имеет. Следовательно, если мы используем эти глаголы в названии переменных, то они должны описывать действие, а не состояние.

Давайте рассмотрим пример:

function isUserAdmin(user: User): boolean {
  return user.role === 'admin'
}
 
const availableRoles = ['admin', 'user']
 
function hasPermission(user: User): boolean {
  return availableRoles.includes(user.role)
}

Для описания boolean значения нужно использовать прилагательные, например, disabled или opened. Таким образом, мы получим более читаемый код:

function isValid(form: Form): boolean {
  // validation logic
}
 
const disabled = !isValid(form)

Такой подходод используется и разработчиками в EcmaScript, W3C. Например, в EcmaScript есть методы Array.isArray, Object.isFrozen, Object.isSealed, Object.isExtensible, Object.is, map.has, etc. В W3C есть методы Element.hasAttribute, Element.hasAttributes, а так же аттрибуты Element.hidden, Element.disabled, Element.checked. Ведь абсолютно логично, что прилагательное именно описывает ваш this.

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

Соавтор этой статьи - Денис Хомиченко (opens in a new tab)