«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как избежать ошибок неточных логических вычислений в JS/TS

Как избежать ошибок неточных логических вычислений в JS/TS

Опубликовано 1 августа 2024 г.
Просматривать:355

Éviter les pièges des évaluations booléennes imprécises en JS/TS

В мире веб-разработки мы часто сталкиваемся с задачами, которые на первый взгляд кажутся простыми, но которые могут быстро превратиться в сложные головоломки. Недавно во время проекта Angular у меня произошел интересный опыт, который напомнил мне о важности точности при оценке логических условий в TypeScript. Я хочу поделиться с вами этим уроком, надеясь, что он поможет вам избежать тех же ошибок.

Контекст проблемы

Исходная ситуация

В моем проекте Angular я столкнулся с условием, в котором участвовали четыре логические переменные. Из этих четырех два зависели от асинхронных данных, поступающих с серверной части через наблюдаемые объекты. Цель была проста: условие должно быть истинным только в том случае, если эти две конкретные переменные были ложными.

Первоначальный подход и его ограничения

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

if (terrainPret && arbitreArrive && 
    !equipeLocaleAbsente && !equipeVisiteuseAbsente) {
  // Commencer le match
}

Этот подход казался элегантным: использование восклицательного знака (!) означало, что асинхронные переменные являются ложными. Однако я быстро обнаружил, что этот метод скрывает тонкую ловушку.

Ловушка логического вычисления

Откровение

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

Техническое объяснение

В TypeScript несколько значений считаются «ложными», то есть оцениваются как ложные в логическом контексте. К этим значениям относятся:

  • ЛОЖЬ
  • 0
  • "" (пустая строка)
  • нулевой
  • неопределенный
  • Неа

В моем случае асинхронные переменные могут быть неопределенными до получения значения от бэкэнда. Следовательно, например, условие !equipeLocaleAbsente было истинным не только тогда, когда переменная была ложной, но и когда она была неопределенной.

Решение: будьте откровенны

Исправленный подход

Чтобы решить эту проблему, мне пришлось более четко описать свое состояние:

if (terrainPret && arbitreArrive && 
    equipeLocaleAbsente === false && equipeVisiteuseAbsente === false) {
  // Commencer le match
}

Этот подход гарантирует, что асинхронные переменные являются именно ложными, а не просто «ложными» значениями.

Преимущества точности

Это решение имеет ряд преимуществ:

  1. Устраняет двусмысленность в оценке условий.
  2. Это делает код более читабельным и более ясным в своих намерениях.
  3. Это предотвращает неожиданное поведение, связанное с оценкой «ложных» значений.

Заключение

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

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/bassaoudev/eviter-les-pieges-des-evaluations-booleennes-imprecisions-en-jsts-19hg?1 Если есть какие-либо нарушения, пожалуйста, свяжитесь с [email protected] удалить его
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3