No tienes acceso a esta clase

¬°Contin√ļa aprendiendo! √önete y comienza a potenciar tu carrera

Contrastemos: Singleton con TS

5/27
Recursos

Aportes 9

Preguntas 0

Ordenar por:

¬ŅQuieres ver m√°s aportes, preguntas y respuestas de la comunidad?

o inicia sesión.

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!!

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.

¬Ņ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.

¬°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!

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()

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.

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)

Curso con TS por favor!!!