Название может звучать так, будто вас ждет всего лишь шутка (я знаю, SEO-катастрофа). Извините, что разочаровал. Этот пост на самом деле посвящен операторам логического присваивания JavaScript, представленным в ES2021. Читайте дальше, чтобы узнать, какое отношение к этому имеют Джордж и Роберт...
Логические операторы присваивания по сути представляют собой смесь логической логики и операции присваивания. Но эти компоненты — это нечто большее, чем можно было бы подумать на первый взгляд.
Во-первых, многие, если не большинство, разработчики могут не осознавать, насколько глубоко вплетена булева логика в ткань современных вычислений. Оно простирается от компьютерных схем до условных операторов в вашем коде.
Мы также используем знак равенства каждый день, часто не задумываясь об этом. Этот символ, который сейчас имеет решающее значение как в математике, так и в кодировании, был изобретен для математических целей еще в 16 веке. Примерно 400 лет спустя, в 1950-х годах, он нашел применение в компьютерном программировании.
Если этот исторический контекст не кажется вам ни капельки интересным, смело переходите к разделу «Понимание логических операторов присваивания». В противном случае присоединяйтесь ко мне в коротком путешествии назад во времени.
Самые ранние исследования логики приписывают древним грекам, в частности Аристотелю, которого часто называют «отцом логики». Он разработал формальную систему логики, которая заложила основу для использования логических операторов.
Настоящая математическая основа логических операторов, какими мы их знаем сегодня, начала формироваться с появлением символической логики в 19 веке. Он использует символы для представления логических форм и структур, что позволяет проводить более сложные и абстрактные рассуждения.
Джордж Буль, английский математик и логик XIX века, в своей основополагающей работе «Законы мышления» (1854 г.) представил алгебраический подход к логике. Здесь значения могут быть либо истинными, либо ложными, и над этими значениями можно выполнять операции, аналогичные алгебраическим операциям. Эта система включала в себя основные логические операторы:
Опираясь на работы Буля, другие математики и логики расширили масштаб и глубину символической логики. А в середине 20-го века она нашла новую и благодатную почву в развивающейся области информатики. Бинарная природа булевой логики оказалась идеально подходящей для цифровых схем в основе компьютеров, где данные могут быть представлены в виде серии нулей и единиц, а логические операторы могут управлять потоком этих данных.
Логические операторы стали фундаментальной частью языков программирования, позволяя создавать сложную вычислительную логику и процессы принятия решений в программном обеспечении. Сегодня они являются неотъемлемой частью синтаксиса почти каждого языка программирования.
Знак равенства был введен в 1557 году валлийским математиком Робертом Рекордом в его книге «Точильный камень Витте». Рекорду надоело постоянно писать «равно» в своей работе, поэтому он выбрал две параллельные линии одинаковой длины в качестве символа равенства. По его словам, это произошло потому, что «две вещи не могут быть более равными». Это было значительным достижением в области математической записи, обеспечившим краткий и ясный способ выражения равенства.
На заре программирования, особенно с использованием машинного кода и языков ассемблера, концепция «назначения» больше касалась хранения и перемещения данных между регистрами и ячейками памяти. Инструкции давались с использованием определенных кодов операций, которые предписывали машине выполнять эти операции.
По мере разработки языков программирования высокого уровня возникла потребность в более абстрактном и удобочитаемом способе представления операции присвоения значений переменным. Это привело к принятию знака равенства в качестве оператора присваивания во многих языках, начиная с FORTRAN в 1950-х годах.
Использование = для присваивания создало некоторую двусмысленность с его математическим значением равенства. Это привело к введению различных символов для пояснения намерений в программировании:
Со временем в языках программирования появились различные формы операторов присваивания для эффективного выполнения различных операций, например, составные операторы присваивания (=, -= и т. д.) и, с недавних пор, операторы логического присваивания в JavaScript.
Логические операторы присваивания — это синтаксический сахар в JavaScript, который сочетает в себе присваивание (=) с логическим (&&, ||) или нулевым оператором объединения (??). Существует три типа:
Оператор &&= — это ярлык для установки значения переменной, только если в данный момент она содержит истинное значение. Это особенно полезно в сценариях, где действие должно выполняться только в том случае, если определенное условие остается истинным.
Пример использования: переключение функций
Представьте себе сценарий, в котором определенные функции должны быть включены только для администраторов:
const isAdmin = user.isAdmin(); let canAccessDashboard = isAdmin; canAccessDashboard &&= user.isAuthenticated(); console.log(canAccessDashboard); // true if user is authenticated, otherwise false
Этот фрагмент кода гарантирует, что canAccessDashboard имеет значение true только в том случае, если и isAdmin, и user.isAuthenticated() имеют значение true, эффективно защищая эту функцию с помощью двух условий.
Оператор ||= позволяет присвоить значение переменной, если переменная в данный момент содержит ложное значение (например, ноль, неопределенное, 0, ложь, ""). Это невероятно полезно для установки значений по умолчанию.
Пример использования: установка значений по умолчанию
const userSettings = { theme: null, }; // Set default theme if none is specified userSettings.theme ||= "dark"; console.log(userSettings.theme); // Outputs 'dark'
Этот оператор идеально подходит для инициализации переменных, которые не были установлены, гарантируя, что ваше приложение использует разумное значение по умолчанию без перезаписи потенциально значимых ложных значений, таких как 0 или false.
?? Оператор, известный как нулевой оператор объединения, появился относительно недавно в языках программирования. Это не логический оператор присваивания в строгом смысле слова, хотя спецификация ES2021 классифицирует его как таковой, поскольку он не основан на логическом операторе. Вместо этого его разработка более тесно связана с практическими потребностями программирования, особенно с обработкой нулевых и неопределенных значений чистым и предсказуемым образом.
Оператор ??= используется для присвоения значения переменной тогда и только тогда, когда переменная в данный момент имеет значение NULL или неопределена. Это более точно, чем оператор ||=, который также учитывает другие ложные значения.
Пример использования: настройки по умолчанию
const config = { timeout: 0, }; config.timeout ??= 5000; // Set default timeout if not specified, i.e. undefined, or null console.log(config.timeout); // Outputs 0, preserving the explicitly set falsy value
Этот оператор особенно полезен в конфигурациях и настройках, где значения по умолчанию должны только заполнять пропущенные значения, не заменяя другие ложные, но действительные настройки, такие как 0.
Использование операторов логического присваивания вместо операторов if или троичных операторов уменьшает объем кода, который вам нужно написать, и может прояснить ваши намерения другим разработчикам. Как и во многих других функциях, важно использовать эти операторы разумно, особенно при работе с ложными значениями, которые действительны в контексте вашего кода.
В JavaScript есть и другие операторы присваивания, например оператор присваивания сдвига влево (
(Обложка вверху от starline на Freepik)
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3