Encapsulamiento con Getters y Setters en JavaScript

Clase 12 de 20Curso Básico de Programación Orientada a Objetos con JavaScript

Resumen

¿Cómo se encapsulan métodos y atributos en JavaScript?

JavaScript es un lenguaje con particularidades únicas que se manifiestan en diversas formas a la hora de trabajar con prototipos y clases. Aunque el encapsulamiento es un concepto familiar en muchos lenguajes, en JavaScript la forma de implementarlo difiere un poco. Aquí analizaremos cómo podemos proteger nuestros datos y métodos de cambios no deseados.

¿Cómo protegemos los atributos en JavaScript?

En lenguajes de programación tradicionales, es común marcar atributos como privado o público para controlar el acceso. Sin embargo, JavaScript no tiene un soporte nativo para el acceso privado. En su lugar, se sigue una convención: prefixar el nombre del atributo con un guion bajo (_). Este método pretende ser una señal amistosa a otros desarrolladores para que entiendan que esos atributos no deberían ser manipulados directamente desde fuera de la clase.

¿Qué son los getters y setters?

Getters y setters son métodos especiales que nos permiten interceptar y controlar el acceso a los propiedades de los objetos:

  • Getters: Permiten acceder a los valores de propiedades encapsuladas.
  • Setters: Facilitan la modificación de dichos valores, permitiendo agregar lógica adicional, como validaciones, antes de realizar cambios.
class Course {
  constructor(name) {
    this._name = name; // uso de prefijo para denotar privacidad
  }

  get name() {
    return this._name; // acceso controlado a la propiedad
  }

  set name(newName) {
    if (!newName.includes("malito")) {
      this._name = newName;
    } else {
      console.warn("Way, no puedes actualizar el curso con ese nombre.");
    }
  }
}

let curso = new Course("Curso gratis de programación básica");
console.log(curso.name); // Accede al nombre utilizando el getter

curso.name = "Curso avanzado de programación"; // Modifica el nombre usando el setter
console.log(curso.name); // Verifica el cambio

¿Cómo se previenen cambios indeseados?

Utilizando setters, podemos establecer restricciones o validaciones que deben cumplirse antes de modificar propiedades. En el caso ilustrado, se previene que el nombre del curso pueda incluir valores considerados inapropiados como "malito".

Desafíos y ejercicios

Practicar con getters y setters es esencial para dominar su uso en JavaScript. Aquí te propongo dos desafíos:

  1. Describe cómo se utilizan getters y setters sin la sintaxis de clases: Comprende cómo trabajar con ellos en prototipos tradicionales de JavaScript.
  2. Aplica getters y setters en un proyecto propio: Actualiza atributos dentro de un sistema más complejo (como un clon de una aplicación educativa) para gestionar estudiantes y cursos.

Estos pasos no solo consolidarán tu conocimiento sobre encapsulamiento en JavaScript, sino que también te prepararán para escribir código más robusto y sostenible. ¡Adelante, sigue explorando! Tu habilidad para gestionar la lógica de negocio con JavaScript crecerá exponencialmente con la práctica.