set-y-get-en-clases-de-javascript

Métodos set y get JavaScript

Los métodos get y set son una sintaxis especial para declarar métodos que permiten declarar métodos que se usan con una sintaxis como variables.

Los métodos getter y setter son funciones cuya función principal es acceder a una propiedad de un objeto, pero realizando ciertas funciones destinadas a mantener el estado interno del objeto

La sintaxis de get y set permite definir métodos getter y setter de forma más cómoda, haciendo más sencilla la encapsulación y validación de datos dentro de una clase.

Métodos get

En términos generales, un método getter es una función especial que permite acceder a una propiedad de un objeto.

Si empleamos la palabra get antes de un método, estamos indicando que queremos que esta sea un getter.

Ahora puedes obtener el valor de una función get como si fuera una variable, pero internamente estás ejecutando un método cada vez que obtienes el valor.

Vamos a verlo con un ejemplo

class Persona {
	#nombre;
	#edad;
	
    constructor(nombre, edad) {
        this.#nombre = nombre;  // Propiedad interna
        this.#edad = edad;      // Propiedad interna
    }

    get nombre() {
        return this.#nombre;   // Acceso controlado a la propiedad #nombre
    }

    get edad() {
        return this.#edad;     // Acceso controlado a la propiedad #edad
    }
}

const persona1 = new Persona("Luis", 25);
console.log(persona1.nombre);  // Llama al método get de nombre y muestra "Luis"

En el ejemplo anterior,

  • El método get nombre permite acceder a la propiedad privada #nombre de la clase Persona de forma controlada.
  • Externamente se usa casi como si fuera una variable usando la notación punto, con persona1.nombre.

Métodos set

Por otro lado, un método setter es una función especial que permite asignar una propiedad de un objeto.

La principal ventaja de los métodos set es que te permiten validar y modificar los valores antes de que sean asignados a las propiedades.

Vamos a verlo con un ejemplo sencillo

class Persona {
	#nombre;
	#edad;
	
    constructor(nombre, edad) {
        this.#nombre = nombre;
        this.#edad = edad;
    }

    set nombre(nuevoNombre) {
        if (nuevoNombre.length > 0) {
            this.#nombre = nuevoNombre;  // Validación antes de asignar el valor
        } else {
            console.log("El nombre no puede estar vacío");
        }
    }

    set edad(nuevaEdad) {
        if (nuevaEdad > 0) {
            this.#edad = nuevaEdad;  // Validación antes de asignar el valor
        } else {
            console.log("La edad debe ser un valor positivo");
        }
    }
}

const persona2 = new Persona("Luis", 30);
persona2.nombre = "";  // Intento de asignar un nombre vacío
persona2.edad = -5;    // Intento de asignar una edad negativa
console.log(persona2.nombre);  // Muestra "Luis" (no se cambió)
console.log(persona2.edad);    // Muestra 30 (no se cambió)

En este ejemplo,

  • Los métodos set para nombre y edad permiten realizar una validación antes de modificar las propiedades internas del objeto.
  • Si los valores no son válidos, el método set puede bloquear la asignación.

Ejemplos prácticos

Vamos a ver algunos ejemplos prácticos de cómo utilizar estos métodos en clases de JavaScript.