Лучший опыт

Подсказки по именованию логических переменных.

Существует определенное соглашение  —  снабжать имена логических переменных и функций префиксами “is” или “has”. Ну, знаете, что-то вроде isLoggedIn, hasAccess или наподобие этого. Но на протяжении своей карьеры мне приходилось и видеть, и писать код, где это соглашение просто выкидывали в корзину. Так что давайте рассмотрим некоторые из таких крайних случаев. Как и с любыми правилами, здесь существуют исключения, и, возможно, лучше смиритьс?
Подсказки по именованию логических переменных...

Существует определенное соглашение  —  снабжать имена логических переменных и функций префиксами “is” или “has”. Ну, знаете, что-то вроде isLoggedIn, hasAccess или наподобие этого.

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

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

Логическая переменная, которая проверяет истинность каждого параметра

const XXX = users.every(user => user.isActive)

XXX будет истинно только в том случае, если каждый пользователь активен. Как мы можем назвать такую переменную?

Логическая переменная, которая проверяет истинность одного из многих параметров

const XXX = users.some(user => user.isActive)

XXX будет истинно в случае, если активен хотя бы один пользователь.

Избегайте кастомных префиксов

Мы уже рассмотрели это в одном из примеров выше, но есть ещё:

Имена без отрицания

Проблема с негативными именами переменных становится особенно очевидной, когда у вас есть что-то вроде этого:

if (!account.isDisabled) {  // ...}

Просто взгляните: насколько проще читается, если сделать вот так:

if (account.isEnabled) {  // ...}

И, наконец, давайте рассмотрим пример посложнее.

const isEveryUserOnline = users.every(user => user.isOnline)  if (!isEveryUserOnline) {   // ... }

Да, оно работает, однако из-за сочетания some и ! требуется все же немного пошевелить мозгами, чтобы понять этот код. Альтернативный вариант будет выглядеть так:

const isEveryUserOnline = users.every(user => user.isOnline)  if (!isEveryUserOnline) {   // ... }

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


Здесь наверняка многое упущено, но, думаю, самые распространенные случаи рассмотреть удалось.

Перевод статьи MichiTips on naming boolean variables