No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Contrastemos: Singleton con TS

5/27
Recursos

Aportes 10

Preguntas 0

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Estaria genial que el proximo curso de patrones de diseño el codigo se realice en TS, ya que ahi se cuentan con las palabras reservadas static, private, etc, que vienen de la POO, y los patrones de diseño van muy de la mano con POO y las interfaces! aunque tampoco esta mal ver como se implementa en Js para comparar con un lagibilidad las sencilla.

Pero por mi parte le doy un punto a TypeScript!!

¿Porqué no existe la palabra reservada private en JS?

Los patrones de diseño fueron creados pensando en lenguajes con soporte para POO. El problema es que JS es un lenguaje donde las clases no existen, sino que más bien son los prototipos los que nos permiten tener un comportamiento similar al de las clases.
Es por esa razón que hay ciertas cosas que muchos lenguajes POO si tienen que JS no.
.
Pero TS soluciona el problema, cierto? En realidad no. Aunque nos de un error en el editor de texto, si se puede usar el operador new (aún con el error). Sin embargo, TS nos da esa pauta para entender mejor que esta haciendo el código y aunque por debajo el error no se solucione. Sabemos que en términos sintácticos hubo un error.

Opino que aplicar patrones en JS sin TS, es como estar en una fiesta sin música 🎶... Tienes una ventaja muy clara con TS, un código más legible y encima el editor te ayuda con intelliSense. Pero cierto que para efectos didácticos es bueno ver en ambas maneras para contrastar. Sobre el Singleton, veo que es prácticamente crear una única instancia de una clase lo cual va un poco en contra de la filosofía de crear clases que es justamente poder hacer muchas instancias de objetos a partir de la clase. Pero en este caso el beneficio real es como encapsular todo dentro de la clase y meter el candado para evitar que accidentalmente puedas duplicar el estado global de una app por ejemplo.

Curso con TS por favor!!!

interface Singleton {
    instance: Singleton
    version: string
    getInstance(version: Singleton['version']): Singleton
}

class Singleton implements Singleton {
    private static instance: Singleton | undefined = undefined
    
    public version: string

    private constructor(version: string) {
        this.version = version
    }

    public static getInstance(version: string): Singleton {
        if(!Singleton.instance) Singleton.instance = new Singleton(version)

        return Singleton.instance
    }
}

function appSingleton() {
    const singleton1 = Singleton.getInstance('1')
    const singleton2 = Singleton.getInstance('2')
    const singleton3 = Singleton.getInstance('3')

    console.log(`singleton1 es igual a singleton2? : ${singleton1 === singleton2}`)
    console.log(`singleton2 es igual a singleton3? : ${singleton2 === singleton3}`)
}

appSingleton()

¡Hola! Estaría super tener otro curso de patrones de diseño, como el de comportamiento o estructurales en lenguajes como Java y Python, esto para no quedarnos con la idea del mismo lenguaje, ¡Gracias!

Comparto la versión del Singleton del ejemplo, realizado en Java:

import java.io.*;

public class Singleton {
    
    private String version;
    static Singleton instance = null;
    
    private Singleton(String version){
        this.version = version;
    }
    
    public static Singleton getInstance(String version){
        if (Singleton.instance == null){
            Singleton.instance = new Singleton(version);
        }
        return instance;
    }
    
    public static void main(String[] args){
        Singleton singleton1 = Singleton.getInstance("version1");
        Singleton singleton2 = Singleton.getInstance("version2");
        
        System.out.println(singleton1 == singleton2);
    }
}

Hola, en mi caso no tengo experiencia usando Js ni Ts, por lo tanto no puedo dar una opinión muy acertada. Pero coincido con otro comentario que leí aquí mismo, respecto a que es bueno contrastar ambos estilos para tener conocimiento en caso de que nos toque trabajar solo con JS o con TS.

estaria cool, pero que no se enseñen los mismos que ya se vieron en js

Lo mismo pero en Python

class Singleton:

    _instance = None

    def __new__(cls, *args, **kwargs):
        if not cls._instance:
            cls._instance = super().__new__(cls, *args, **kwargs)
        return cls._instance


my_instance = Singleton()
print(my_instance)

another_instance = Singleton()
print(another_instance)