"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > George y Robert entran a un bar...

George y Robert entran a un bar...

Publicado el 2024-08-01
Navegar:225

George and Robert walk into a bar...

El título puede parecer como si solo hubiera una broma esperándote (un desastre de SEO, lo sé). Lamento decepcionar. En realidad, esta publicación trata sobre los operadores de asignación lógica de JavaScript introducidos en ES2021. Continúe leyendo para descubrir qué tienen que ver George y Robert con esto...

Antecedentes históricos

Los operadores de asignación lógica son esencialmente una combinación de lógica booleana y la operación de asignación. Pero hay más en estos componentes de lo que uno podría pensar inicialmente.

Por un lado, es posible que muchos, si no la mayoría, de los desarrolladores no se den cuenta de cuán profundamente entrelazada está la lógica booleana en el tejido de la informática moderna. Se extiende desde circuitos de computadora hasta declaraciones condicionales en su código.

También usamos el signo igual todos los días, a menudo sin pensarlo mucho. Este símbolo, ahora crucial tanto en matemáticas como en codificación, fue inventado con fines matemáticos allá por el siglo XVI. Unos 400 años después, en la década de 1950, llegó a la programación informática.

Si este contexto histórico no le parece en lo más mínimo interesante, no dude en pasar a la sección Comprensión de los operadores de asignaciones lógicas. De lo contrario, acompáñame en un breve viaje al pasado.

George Boole

Los primeros estudios de la lógica se atribuyen a los antiguos griegos, particularmente a Aristóteles, a quien a menudo se le llama el "padre de la lógica". Desarrolló un sistema formal de lógica que sentó las bases para el uso de operadores lógicos.

La verdadera base matemática de los operadores lógicos tal como los conocemos hoy comenzó a tomar forma con la llegada de la lógica simbólica en el siglo XIX. Utiliza símbolos para representar formas y estructuras lógicas, lo que permite un razonamiento más complejo y abstracto.

George Boole, matemático y lógico inglés del siglo XIX, en su obra fundamental "Las leyes del pensamiento" (1854), introdujo un enfoque algebraico de la lógica. Aquí los valores pueden ser verdaderos o falsos, y se pueden realizar operaciones con estos valores, de forma análoga a las operaciones algebraicas. Este sistema incluía los operadores lógicos básicos:

  • Y (conjunción)
  • O (disyunción)
  • NO (negación)

A partir del trabajo de Boole, otros matemáticos y lógicos ampliaron el alcance y la profundidad de la lógica simbólica. Y a mediados del siglo XX encontró un terreno nuevo y fértil en el campo emergente de la informática. La naturaleza binaria de la lógica booleana demostró ser perfectamente adecuada para los circuitos digitales en el corazón de las computadoras, donde los datos podían representarse como una serie de 0 y 1, y los operadores lógicos podían controlar el flujo de estos datos.

Los operadores lógicos se convirtieron en parte fundamental de los lenguajes de programación, permitiendo la construcción de lógica computacional compleja y procesos de toma de decisiones en software. Hoy en día, son parte integral de la sintaxis de casi todos los lenguajes de programación.

Robert Recorde

El signo igual fue introducido en 1557 por el matemático galés Robert Recorde en su libro "La piedra de afilar de Witte". Recorde se cansó de escribir "es igual a" repetidamente en su trabajo, por lo que eligió dos líneas paralelas de la misma longitud como símbolo de igualdad. Como él dijo, fue porque "no hay dos cosas que puedan ser más iguales". Este fue un avance significativo en la notación matemática, ya que proporcionó una forma clara y concisa de expresar la igualdad.

En los primeros días de la programación, particularmente con código de máquina y lenguajes ensambladores, el concepto de "asignación" tenía más que ver con almacenar y mover datos entre registros y ubicaciones de memoria. Las instrucciones se dieron utilizando códigos de operación específicos que dirigieron a la máquina a realizar estas operaciones.

A medida que se desarrollaron los lenguajes de programación de alto nivel, surgió la necesidad de una forma más abstracta y legible para los humanos de representar la operación de asignación de valores a las variables. Esto llevó a la adopción del signo igual como operador de asignación en muchos idiomas, comenzando con FORTRAN en la década de 1950.

El uso de = para la asignación creó cierta ambigüedad con su significado matemático de igualdad. Esto resultó en la introducción de diferentes símbolos para aclarar la intención en la programación:

  • Algol, desarrollado en la década de 1960, introdujo el símbolo := para la asignación, distinguiéndolo de la comparación de igualdad.
  • Posteriormente, C popularizó el uso de = para asignaciones y == para pruebas de igualdad, una convención que muchos lenguajes posteriores han seguido.

Con el tiempo, los lenguajes de programación han introducido varias formas de operadores de asignación para manejar diferentes operaciones de manera eficiente, como operadores de asignación compuestos (=, -=, etc.) y, más recientemente, operadores de asignación lógica en JavaScript.

Comprensión de los operadores de asignación lógica

Los operadores de asignación lógica son azúcar sintáctico en JavaScript que combinan la asignación (=) con un operador lógico (&&, ||) o coalescente nulo (??). Hay tres tipos:

  • Asignación AND lógica (&&=): Asigna el valor de la derecha a la variable de la izquierda solo si la variable de la izquierda es verdadera.
  • Asignación OR lógica (||=): Asigna el valor de la derecha a la variable de la izquierda solo si la variable de la izquierda es falsa.
  • Asignación coalescente nula (??=): Asigna el valor de la derecha a la variable de la izquierda solo si la variable de la izquierda es nula o no está definida.

Asignación lógica AND (&&=)

El operador &&= es un atajo para establecer el valor de una variable solo si actualmente tiene un valor verdadero. Es particularmente útil en escenarios donde una acción solo debe continuar si una determinada condición sigue siendo verdadera.

Caso de uso de ejemplo: alternancia de funciones

Imagínese un escenario en el que ciertas funciones solo deberían estar habilitadas para administradores:

const isAdmin = user.isAdmin();
let canAccessDashboard = isAdmin;

canAccessDashboard &&= user.isAuthenticated();
console.log(canAccessDashboard); // true if user is authenticated, otherwise false

Este fragmento de código garantiza que canAccessDashboard solo sea verdadero si isAdmin y user.isAuthenticated() son verdaderos, protegiendo efectivamente la función detrás de dos condiciones.

Asignación lógica OR (||=)

El operador ||= le permite asignar un valor a una variable si la variable actualmente tiene un valor falso (por ejemplo, nulo, indefinido, 0, falso, ""). Esto es increíblemente útil para configurar valores predeterminados.

Caso de uso de ejemplo: configuración de valores predeterminados

const userSettings = {
  theme: null,
};

// Set default theme if none is specified
userSettings.theme ||= "dark";
console.log(userSettings.theme); // Outputs 'dark'

Este operador es ideal para inicializar variables que no se han configurado, asegurando que su aplicación utilice un valor predeterminado sensato sin sobrescribir valores falsos potencialmente significativos como 0 o falso.

Asignación coalescente nula (??=)

El ?? El operador, conocido como operador coalescente nulo, es una adición relativamente reciente a los lenguajes de programación. No es un operador de asignación lógica en sentido estricto, aunque la especificación ES2021 lo clasifica como tal, ya que no se basa en un operador lógico. En cambio, su desarrollo está más estrechamente ligado a las necesidades prácticas de la programación, particularmente en el manejo de valores nulos e indefinidos de una manera limpia y predecible.

El operador ??= se usa para asignar un valor a una variable si y solo si la variable actualmente es nula o no está definida. Esto es más preciso que el operador ||=, que también considera otros valores falsos.

Caso de uso de ejemplo: configuración predeterminada

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 es particularmente útil en configuraciones y ajustes donde los valores predeterminados solo deben completar los valores faltantes sin reemplazar otras configuraciones falsas pero válidas como 0.

Beneficios y consideraciones prácticas

El uso de operadores de asignación lógica, en lugar de declaraciones if o ternarias, reduce la cantidad de código que necesita escribir y puede dejar sus intenciones más claras para otros desarrolladores. Como ocurre con muchas funciones, la clave es utilizar estos operadores con prudencia, especialmente cuando se trata de valores falsos que son válidos en el contexto de su código.

Nota adicional

Hay más operadores de asignación en JavaScript, como el operador de asignación de desplazamiento a la izquierda (

(Imagen de portada en la parte superior por starline en Freepik)

Declaración de liberación Este artículo se reproduce en: https://dev.to/codejet/george-and-robert-walk-into-a-bar-413e?1 Si hay alguna infracción, comuníquese con [email protected] para eliminarla.
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3