Быть или не быть, вот в чем вопрос 🧐
Частельно сталкиваюсь с мнением из начала 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)