Organización
Clase 19 de 24 • Curso de Clean Code y Buenas Prácticas con JavaScript
Contenido del curso
Clase 19 de 24 • Curso de Clean Code y Buenas Prácticas con JavaScript
Contenido del curso
LEONARD CUENCA
Markin Piero Pulache Guarniz
Elcira Ibarra
Irving Juárez
Arturo Malgor
Arturo Malgor
Carlos Rivas
Sandra Rosa Arroyo Paredes
Sandra Rosa Arroyo Paredes
Clase 19: Organización
buen aporte
Organización de clases
Porque tener setter y getters
Los setters y getters son funciones para asignar y devolver un valor. Por ejemplo ten en cuenta los siguientes ejemplos
// SIN gettes y setters ❌ class Person { constructor(name) { this.name = name } } const irving = new Person("irving") irving.name = "Irvong" // asignando propiedad console.log(irving.name) // accediendo // CON getters y setters ✔️ class Person { constructor(name) { this._name = name } get name(){ return this._name } set name(newValue){ this._name = newValue } } const irving = new Person("irving") irving.name = "Irvong" // asignando propiedad console.log(irving.name) // accediendo
Estas dos classes hacen los mismo, asignan y retornan propiedad. Suena un poco como a lo mismo, no? Porque usar setters y getters entonces?
.
Ahí esta el asunto, con los getters y setters nosotros podemos crear ciertas validaciones. Por ejemplo, para asignar el valor a irving.name = 4, nosotros podemos validar que el nuevo valor sea de tipo string. Con los setters se puede lograr, mientras que sin ellos, no es posible.
.
Lo mismo aplica para los getters. Lo que se esta haciendo es un proxy, o una capa de validación para ver si el dato que se quiere entregar o asignar puede ejecutar esa acción de acuerdo a diversas validaciones o contextos
Las variables estáticas son variables en programación que mantienen su valor durante toda la vida útil del programa y se pueden compartir entre diferentes partes del código, como por ejemplo entre diferentes funciones o instancias de una clase.
Los getters y setters son métodos que te permiten acceder y modificar las propiedades de un objeto de manera controlada. Los getters te permiten obtener el valor de una propiedad, mientras que los setters te permiten modificar su valor.
Para definir un getter o un setter, se utiliza la sintaxis de métodos de acceso, que es muy similar a la de los métodos normales, pero con la palabra clave "get" o "set" antes del nombre del método.
Los getters y setters son útiles para agregar validaciones y restricciones antes de obtener o modificar una propiedad, lo que te permite mantener un mayor control sobre los datos que manejas.
public class MiClase { // Constantes private static final int CONSTANTE = 100; // Variables de instancia private int variableInstancia; // Variables estáticas private static int contador; // Constructor public MiClase(int valor) { this.variableInstancia = valor; } // Métodos estáticos public static void metodoEstatico() { // lógica } // Métodos públicos public void metodoPublico() { // lógica } // Getters y setters public int getVariableInstancia() { return variableInstancia; } public void setVariableInstancia(int variableInstancia) { this.variableInstancia = variableInstancia; } // Métodos privados private void metodoPrivado() { // lógica interna } } ```public class MiClase {   // Constantes   private static final int CONSTANTE = 100;   // Variables de instancia   private int variableInstancia;   // Variables estáticas   private static int contador;   // Constructor   public MiClase(int valor) {   this.variableInstancia = valor;   }   // Métodos estáticos   public static void metodoEstatico() {   // lógica   }   // Métodos públicos   public void metodoPublico() {   // lógica   }   // Getters y setters   public int getVariableInstancia() {   return variableInstancia;   }   public void setVariableInstancia(int variableInstancia) {   this.variableInstancia = variableInstancia;   }   // Métodos privados   private void metodoPrivado() {   // lógica interna   } }
Un ejemplo
class Producto { // Constantes static const IVA = 0.21; static const DESCUENTO_MAXIMO = 0.5; // Variables estáticas static contadorProductos = 0; // Variables de instancia #id; #nombre; #precio; #descuento; constructor(nombre, precio) { this.#id = ++Producto.contadorProductos; this.#nombre = nombre; this.#precio = precio; this.#descuento = 0; } // Getters get id() { return this.#id; } get nombre() { return this.#nombre; } get precio() { return this.#precio; } get descuento() { return this.#descuento; } // Setters set nombre(nuevoNombre) { if (typeof nuevoNombre === 'string' && nuevoNombre.trim() !== '') { this.#nombre = nuevoNombre.trim(); } } set descuento(nuevoDescuento) { if (nuevoDescuento >= 0 && nuevoDescuento <= Producto.DESCUENTO_MAXIMO) { this.#descuento = nuevoDescuento; } } // Métodos calcularPrecioFinal() { const precioConDescuento = this.#precio * (1 - this.#descuento); return precioConDescuento * (1 + Producto.IVA); } // Funciones estáticas static compararPrecios(producto1, producto2) { return producto1.calcularPrecioFinal() - producto2.calcularPrecioFinal(); } } // Uso de la clase const producto1 = new Producto("Laptop", 1000); producto1.descuento = 0.1; console.log(producto1.calcularPrecioFinal()); const producto2 = new Producto("Smartphone", 500); console.log(Producto.compararPrecios(producto1, producto2));
Con respecto a variables/métodos de instancia/estáticas, sus diferencias clave son:
En resumen, los miembros de instancia (variables y métodos) están vinculados a objetos específicos y manejan el estado y comportamiento individual, mientras que los miembros estáticos (variables y funciones) pertenecen a la clase en su conjunto y manejan aspectos compartidos o globales de la clase.