Логические операторы
Логические операторы
Технический фундамент композиции условий
Логические операторы описывают бизнес-правила в комбинированных условиях:
&&и||определяют обязательные и альтернативные критерии;- short-circuit влияет и на результат, и на выполнение правой части выражения;
- порядок проверок должен отражать бизнес-приоритеты;
- длинные условия лучше декомпозировать на именованные флаги.
Такая структура делает поведение сложных веток предсказуемым и тестируемым.
Почему логические операторы важны для продуктовых правил
Одного сравнения обычно недостаточно. В реальном коде условия комбинируются: пользователь авторизован и email подтвержден, подписка активна или включен trial, действие доступно не заблокированным. Логические операторы позволяют собирать такие правила.
Ключевой момент: &&, ||, ! управляют тем, как несколько булевых условий дают единый результат.
Проверь себя: почему неправильный порядок условий может открыть доступ не тем пользователям?
Базовые операторы
&&(и): true, если оба операнда true;||(или): true, если хотя бы один true;!(не): инвертирует значение.
const isAuth = true;
const isVerified = false;
console.log(isAuth && isVerified); // false
console.log(isAuth || isVerified); // true
console.log(!isVerified); // true
Смотри, что важно: логические операторы могут работать не только с boolean, но и с truthy/falsy значениями.
Короткое замыкание (short-circuit)
JavaScript может не вычислять вторую часть выражения, если результат уже понятен.
const isReady = false;
isReady && console.log('Запустится только если true');
Для &&: если слева falsy, правая часть не выполняется.
Для ||: если слева truthy, правая часть не выполняется.
Это полезно и для оптимизации, и для безопасных проверок.
Truthy/Falsy в логике
const name = '';
const fallbackName = name || 'Гость';
console.log(fallbackName); // Гость
Здесь часто путаются: 0, '', null, undefined, NaN, false - falsy.
Проверь себя: почему count || 1 может быть багом, если count законно может быть 0?
В таких случаях часто используют оператор нулевого слияния ?? (nullish coalescing): он считает "пустыми" только null и undefined, но не трогает 0, '' и false.
const count = 0;
console.log(count || 1); // 1 (может быть багом)
console.log(count ?? 1); // 0 (сохраняет валидный ноль)
Мини-сценарий: выбор экрана
function getScreen(isBlocked, isAuth, hasSubscription) {
if (isBlocked) return 'blocked';
if (!isAuth) return 'auth-required';
if (isAuth && hasSubscription) return 'full';
return 'limited';
}
Логические операторы здесь описывают бизнес-приоритеты в явном виде.
Смотри, что важно: !isAuth и isAuth && hasSubscription читаются как бизнес-правила, а не как случайный набор символов.
Частые ошибки новичков
- Путать
&&и||в сложных условиях. - Не учитывать короткое замыкание и побочные эффекты.
- Полагаться на truthy/falsy там, где нужна строгая проверка.
- Писать длинные условия без промежуточных переменных.
Анти-провал: сложное условие лучше разбить на const isAllowed = ..., const isPremium = ....
Что будет, если изменить вход
В getScreen:
isBlocked=true-> всегдаblocked;isBlocked=false,isAuth=false->auth-required;isAuth=true,hasSubscription=true->full;isAuth=true,hasSubscription=false->limited.
Проверь себя: почему проверка isBlocked должна быть первой?
Краткий итог
- Логические операторы соединяют и инвертируют условия.
&&,||,!лежат в основе всех сложных ветвлений.- Короткое замыкание важно понимать для корректности и производительности.
- Truthy/falsy удобно, но требует осторожности на граничных данных.
- Читаемые логические выражения напрямую повышают надежность бизнес-логики.