O título pode parecer que há apenas uma piada esperando por você aqui (um desastre de SEO, eu sei). Desculpe decepcionar. Esta postagem é, na verdade, sobre os operadores de atribuição lógica do JavaScript introduzidos no ES2021. Continue lendo para descobrir o que George e Robert têm a ver com isso...
Operadores de atribuição lógica são essencialmente uma mistura de lógica booleana e operação de atribuição. Mas há mais nesses componentes do que se poderia pensar inicialmente.
Por um lado, muitos, senão a maioria, dos desenvolvedores podem não perceber o quão profundamente a lógica booleana está inserida na estrutura da computação moderna. Ele se estende desde circuitos de computador até instruções condicionais em seu código.
Também usamos o sinal de igual todos os dias, muitas vezes sem pensar muito nisso. Este símbolo, agora crucial tanto na matemática como na codificação, foi inventado para fins matemáticos no século XVI. Cerca de 400 anos depois, na década de 1950, ele encontrou seu caminho na programação de computadores.
Se este contexto histórico não parece nem um pouco interessante para você, sinta-se à vontade para pular para a seção Compreendendo os operadores de atribuição lógica. Caso contrário, junte-se a mim em uma breve viagem no tempo.
Os primeiros estudos de lógica são atribuídos aos antigos gregos, particularmente Aristóteles, que é frequentemente chamado de "Pai da Lógica". Ele desenvolveu um sistema formal de lógica que lançou as bases para o uso de operadores lógicos.
A verdadeira base matemática dos operadores lógicos como os conhecemos hoje começou a tomar forma com o advento da lógica simbólica no século XIX. Ele usa símbolos para representar formas e estruturas lógicas, o que permite um raciocínio mais complexo e abstrato.
George Boole, um matemático e lógico inglês do século 19, em sua obra seminal "As Leis do Pensamento" (1854), introduziu uma abordagem algébrica da lógica. Aqui os valores podem ser verdadeiros ou falsos, e operações podem ser realizadas sobre esses valores, de forma análoga às operações algébricas. Este sistema incluía os operadores lógicos básicos:
Com base no trabalho de Boole, outros matemáticos e lógicos expandiram o escopo e a profundidade da lógica simbólica. E em meados do século XX encontrou um terreno novo e fértil no campo emergente da ciência da computação. A natureza binária da lógica booleana provou ser perfeitamente adequada aos circuitos digitais no coração dos computadores, onde os dados podiam ser representados como uma série de 0s e 1s, e os operadores lógicos podiam controlar o fluxo desses dados.
Os operadores lógicos tornaram-se parte fundamental das linguagens de programação, permitindo a construção de lógica computacional complexa e processos de tomada de decisão em software. Hoje, eles são parte integrante da sintaxe de quase todas as linguagens de programação.
O sinal de igual foi introduzido em 1557 pelo matemático galês Robert Recorde em seu livro "The Whetstone of Witte". Recorde se cansou de escrever "é igual a" repetidamente em seu trabalho, então escolheu duas linhas paralelas do mesmo comprimento como símbolo de igualdade. Como ele disse, foi porque "nenhuma coisa pode ser mais igual". Este foi um desenvolvimento significativo na notação matemática, fornecendo uma maneira concisa e clara de expressar a igualdade.
Nos primeiros dias da programação, especialmente com código de máquina e linguagens assembly, o conceito de "atribuição" era mais sobre armazenar e mover dados entre registradores e locais de memória. As instruções foram fornecidas usando opcodes específicos que orientavam a máquina a realizar essas operações.
À medida que linguagens de programação de alto nível foram desenvolvidas, houve a necessidade de uma forma mais abstrata e legível para representar a operação de atribuição de valores a variáveis. Isso levou à adoção do sinal de igual como operador de atribuição em muitas línguas, começando com FORTRAN na década de 1950.
O uso de = para atribuição criou alguma ambigüidade com seu significado matemático de igualdade. Isso resultou na introdução de diferentes símbolos para esclarecer a intenção da programação:
Com o tempo, as linguagens de programação introduziram várias formas de operadores de atribuição para lidar com diferentes operações de forma eficiente, como operadores de atribuição compostos (=, -=, etc.) e, mais recentemente, operadores de atribuição lógica em JavaScript.
Operadores de atribuição lógica são açúcares sintáticos em JavaScript que combinam atribuição (=) com um operador lógico (&&, ||) ou coalescente nulo (??). Existem três tipos:
O operador &&= é um atalho para definir o valor de uma variável somente se ela atualmente tiver um valor verdadeiro. É particularmente útil em cenários onde uma ação só deve prosseguir se uma determinada condição permanecer verdadeira.
Exemplo de caso de uso: alternância de recurso
Imagine um cenário em que determinados recursos só deveriam ser habilitados para administradores:
const isAdmin = user.isAdmin(); let canAccessDashboard = isAdmin; canAccessDashboard &&= user.isAuthenticated(); console.log(canAccessDashboard); // true if user is authenticated, otherwise false
Este trecho de código garante que canAccessDashboard só seja verdadeiro se isAdmin e user.isAuthenticated() forem verdadeiros, protegendo efetivamente o recurso por trás de duas condições.
O operador ||= permite atribuir um valor a uma variável se a variável atualmente contém um valor falso (por exemplo, nulo, indefinido, 0, falso, ""). Isso é extremamente útil para definir valores padrão.
Exemplo de caso de uso: configuração de padrões
const userSettings = { theme: null, }; // Set default theme if none is specified userSettings.theme ||= "dark"; console.log(userSettings.theme); // Outputs 'dark'
Este operador é ideal para inicializar variáveis que não foram definidas, garantindo que seu aplicativo use um padrão sensato sem substituir valores falsos potencialmente significativos, como 0 ou falso.
O ?? O operador, conhecido como operador de coalescência nulo, é uma adição relativamente recente às linguagens de programação. Não é um operador de atribuição lógica em sentido estrito, embora a especificação ES2021 o classifique como tal, uma vez que não é baseado em um operador lógico. Em vez disso, o seu desenvolvimento está mais intimamente ligado às necessidades práticas da programação, particularmente no tratamento de valores nulos e indefinidos de uma forma limpa e previsível.
O operador ??= é usado para atribuir um valor a uma variável se e somente se a variável for atualmente nula ou indefinida. Isso é mais preciso que o operador ||=, que também considera outros valores falsos.
Exemplo de caso de uso: padrões de configuração
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
Este operador é particularmente útil em configurações e ajustes onde os padrões devem apenas preencher valores ausentes sem substituir outras configurações falsas, mas válidas, como 0.
O uso de operadores de atribuição lógica, em vez de instruções if ou ternárias, reduz a quantidade de código que você precisa escrever e pode tornar suas intenções mais claras para outros desenvolvedores. Tal como acontece com muitos recursos, a chave é usar esses operadores criteriosamente, especialmente ao lidar com valores falsos que são válidos no contexto do seu código.
Existem mais operadores de atribuição em JavaScript, como o operador de atribuição de deslocamento para a esquerda (
(Imagem da capa no topo por starline no Freepik)
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3