Sobrecarga de operadores en JavaScript

Anika Tabassum Era 15 febrero 2024
Sobrecarga de operadores en JavaScript

En la etapa primitiva, JavaScript no tenía ninguna forma explícita de definir la función de sobrecarga del operador. Más tarde, hubo una actualización donde tendríamos que usar el comando npm install operator-overloading --save para habilitar la sintaxis.

Iniciaríamos una variable anotando var sobrecarga = require('operador-sobrecarga') y luego definiríamos la función sobrecarga para nuestro caso. Pero el caso de uso más reciente tiene una forma más flexible de definir el alcance de la función para la sobrecarga del operador.

Dependeremos de las dependencias de Babel Dev, ya que es más fácil para las pruebas. Explicaremos la guía para instalar sus necesidades en el siguiente segmento y mostraremos un ejemplo.

Implementar la sobrecarga de operadores en JavaScript

El comienzo básico es crear un directorio y configurar el paquete.json necesario. Entonces, primero crearemos una carpeta llamada “sobrecarga del operador” y la abriremos en Visual Studio Code.

En la terminal de VSCode ejecutaremos los siguientes comandos.

npm init -y
npm install

Después de ejecutar estos comandos, el paquete.json no se agrega a su carpeta; habrá uno package-lock.json. Descomprima el contenido de este archivo de este portal, copie el contenido y péguelo en un nuevo archivo llamado paquete.json que debe crear en su carpeta base.

A continuación, siga los siguientes comandos en la terminal.

npm install --save-dev @babel/core @babel/preset-env @babel/cli @babel/node
npm install --save-dev @jetblack/operator-overloading

Ahora, cree un archivo .babelrc en el directorio raíz y configure su contenido de esta manera:

{
    "presets": [
        [
            "@babel/preset-env",
            {
                "targets" : {
                    "node": "current"
                }
            }
        ]
    ],
    "plugins": ["module:@jetblack/operator-overloading"]
}

Entonces, se inician todas sus dependencias para habilitar la sobrecarga del operador. Todo lo que tiene que hacer ahora es crear un archivo JavaScript y escribir códigos para verificar el mecanismo de sobrecarga del operador.

Fragmento de código:

class Point {
  constructor(x, y) {
    this.x = x this.y = y
  }
  [Symbol.for('+')](other) {
    const x = this.x + other.x
    const y = this.y + other.y
    return new Point(x, y);
  }
}
// Built in operators still work.
const x1 = 2
const x2 = 3
const x3 = x1 - x2
console.log(x3)
// Overridden operators work!
const p1 = new Point(5, 5)
const p2 = new Point(2, 3)
const p3 = new Point(4, 2)

const p4 = p1 + p2
const p5 = p4 + p3
console.log(p5)

Para probar el resultado del código anterior, intente abrir un portal Bash en VSCode y ejecute lo siguiente. Técnicamente, probaremos nuestro código a través de babel-node.cmd.

./node_modules/.bin/babel-node.cmd ex.js

Aquí, ex.js es nuestro nombre de archivo JavaScript. La salida que se infiere es acorde a lo esperado. Vamos a ver.

Producción:

sobrecarga del operador

El Punto de clase es la clase iniciada con un constructor con dos parámetros. Para el caso de sobrecarga del operador aquí, tenemos la sintaxis [Symbol.for(+)](other).

Para diferentes operadores, esta sintaxis cambia. Sin embargo, los objetos p1 y p2 tienen la correspondiente x resumida durante todo el proceso.

Generalmente, la instancia más a la izquierda o inicial se define por this.x(x of p1 = 5), y la siguiente x de p2 = 2 se denota por other.x. Este es el concepto básico para realizar p1.add(p2).

En el resultado final de sumar todas las clases definidas por el usuario, obtenemos x=11 e y=10.

Hay otra forma de explicar la sobrecarga de operadores. ExtendScript es una de las facetas que retrata la operación a través del dominio UX; además, PaperScript tiene una buena forma de definir el principio de funcionamiento.

Puede usar proxy y Symbol para completar la tarea. Además, toString() y valueOf() funcionan sin esfuerzo para presentar el concepto de esta función.

Los operadores que no admiten sobrecarga son typeof, ===, !==, &&, || e instanceof.

Anika Tabassum Era avatar Anika Tabassum Era avatar

Era is an observer who loves cracking the ambiguos barriers. An AI enthusiast to help others with the drive and develop a stronger community.

LinkedIn Facebook

Artículo relacionado - JavaScript Operator