Hay un caso de uso concreto donde los namespaces son una bendiciÃģn. En NGXS a la hora de crear las acciones, que son clases y que tienen todo el sentido tener todos en un Único archivo, el namespace ayuda a poder encapsular todas estas clases en un Único namespace que funciona como una especie de clase padre estÃĄtica donde residen todas las clases de cada una de las acciones y no tener que importarlas una a una, sino con importar todo el namespace ya tienes acceso a todas las acciones
yo creo que cuando el proyecto es muy gigante. es recomendado usar namespace. pero si es un proyecto mediano o pequeÃąo. es mejor hacer los import| export.
El enum tiene un downside no mencionado, y es que si lo defines sin usar const, se transpila en un objeto con todos los key: values, pero si lo defines con const, solo se compilan los usos del mismo. Interesante, no te parece?
Yo cuando aprendi Unity con C# y vi los namespace tenia miedo. Hasta el dia de hoy sigo sin entender para que sirven pero mejor los tengo ahi sin tocar nada
Estoy de acuerdo con todo lo que se expone aquÃ, aunque podrÃa opinar acerca de los namespaces si se me permite. Estos son mÃĄs una forma de organizar proyectos en los que existe una gran cantidad de clases que muchas veces no se sabe de donde vienen, si son nuestras o de librerÃas third party. No es comÚn en Javascript/Typescript pero es una prÃĄctica que se lleva a cabo de antaÃąo un lenguajes como C# y Java (los padres de Typescript). Aunque entiendo que Javascript ya contaba con mÃģdulos que hacÃan algo muy similar. Es un error pensar que un namespace solo puede vivir en un archivo. Y La verdad serÃa mala prÃĄctica tener todas las clases/mÃĐtods de un namespace en un mismo archivo. Mis condolencias al que tenga que mantener eso. Un ejemplo Útil podrÃa ser que si escribo una librerÃa de conversiÃģn de archivos multimedia, podrÃa tener los siguientes archivos. - namespace Converter.Audio: - - MP3Converter.ts : namespace Converter.Audio { export class MP3Converter { ... } } - - OGGConverter.ts : namespace Converter.Audio { export class OGGConverter { ... } } - namespace Converter.Video: - - MP4Converter.ts : namespace Converter.Video { export class MP4Converter { ... } } - - MOVConverter.ts : namespace Converter.Video { export class MOVConverter{ ... } } Y para usarlo en mi "codigo cliente" serÃa: import Audio = Converter.Audio; // imports import Video = Converter.Video; // imports ... { code here } ... new Audio.MP3Converter(); new Audio.OGGConverter(); y... new Video.MP4Converter(); new Video.MOVConverter(); ... { code here } ... Sinceramente lo Único que no me gusta de esto, es tener que llamar al namespace antes de llamar a la clase, pero tiene sentido para evitar que dos clases con el mismo nombre en diferentes "paquetes" entren en conflicto.
Soy fan de tus videos... DespuÃĐs de escuchar el video me he quedado con la mosca sobre los decoradores. EstarÃa genial que hicieras un video explicativo porque es algo interesante. ÂĄGracias! Y enhorabuena por el canal!! Happy coding!
Es que no entiendo porque mezclar los usos. Una cosa es que un framework te de decoradores para extender clases propiedades etc para poder hacer cosas en automÃĄtico (definidas por el framework) y otra es que uno de ponga constante a programar todo con decoradores.
@midulive midu, tengo entendido que los emuns de typescript se compilan a JS, en forma de funcion. me parece haberlo visto de hecho en playground oficial, asi que no tiene costo 0. saludos!
Aquà en MÃĐxico cuando uno dice "Si no les gusta, pues nada" es "Si no les gusta, pues a chingar a m4dre", cuando lo dices pienso que dirÃĄs eso jajajajajaja excelente video
Un namespace no solo es usado para encapsular funcionalidades, de hecho esa cualidad es secundaria. El objetivo real de un namespace es poder definir una funciÃģn con el mismo nombre y parÃĄmetros pero con diferente implementaciÃģn en 2 o mÃĄs mÃģdulos. Claro que estÃĄ opciÃģn es aplicable cuando el polimorfismo no puede ser usado. Un buen ejemplo de uso de namespace es cuando se necesita enviar informaciÃģn por medio de diferentes canales de comunicaciÃģn, los cuales siempre tienen las mismas funcionalidades, get, post, send, receive etc, pero con la diferencia de que la implementacion para cada canal es totalmente diferente y usan diferentes APIs. en ese caso el polimorfismo no es aplicable solamente se puede resolver con namespaces, claro, si es que no se quiere tener un nombre de funciÃģn diferente para cada canal de comunicaciÃģn. namespace Serial { export function receive(s: string){ //implementaciÃģn para recibir data por puerto serial } } namespace Socket { export function receive(s: string){ //implementaciÃģn para recibir data por socket } }
Muy buen video! Concuerdo en que todas las razones para no usar Typescript no tienen sentido. Entiendo que este video tiene bastante tiempo pero realmente no estoy para nada de acuerdo respecto a las properties. Es importante entender desde mi punto de vista que aclaraste respecto a JS pero por otro lado es importante entender para que sirven, el rol de las properties es para poder generar abstracciones en donde su especificacion este 100% separada de su implementacion. Claramente este concepto en JS no tiene mucho sentido pero en Typescript cobra una fuerza muy grande ya que podes tener diferentes implementaciones que respeten una misma interfaz en donde su estado puede ser diferente.
private verboso? El private es unaa sintaxis comÚn de los lenguajes de programaciÃģn orientados a objetos, y los lenguajes de programaciÃģn orientados a objetos de por si son verbosos .Luego vamos a tener tipos de datos de javascript como: i, f, d, s, da, b, y c, para que no sean tan verbosos porque int, float, double, string, date, boolean y char son verbosos.
TÚ lo dijiste, para esos lenguajes, JavaScript no es un lenguaje orientado a objetos, sino a prototipos. Me encanta C#, pero son diferentes; tambiÃĐn, el # permite identificar visualmente una propiedad privada al usarse y no solo al declararse, Útil en un lenguaje dinÃĄmico como JS.
Minudev , excelente aporte y video!!, no me digas que te pasaste ya a typescript o le estas hechando ojitos para usarlo pronto en tu dia a dia?? ðĪĢðĪĢ
Js deberia ser ts nativo sin transpilador, y al menos dejar las malas prÃĄcticas en js he encontrado code que madre mia calladito me quede para no discutir o caer mal a los otro programadores al final node deberÃa permitir de forma nativa y el tipado debe estar en tiempo de ejcucion y la llamada de error por que muchas veces no coincide la linea de error del codigo con el transpilado
Los decoradores muchas veces rompen SOLID porque hacen magias que dotan de segundas finalidades a una clase, un repositorio es un repositorio no es un repositorio que a su vez publica mensajes en rabbit y que a su vez manda un mail Las cosas tienen su razÃģn de ser y su sitio donde ir, no confundamos resolutividad con chapuceria En cuanto a lo de private estoy en desacuerdo porque mejor un codigo que se explica solo que un cÃģdigo que hay que adivinar, hay que programar tambiÃĐn pensando en los demÃĄs y si viene un junior al equipo mejor que de primeras sepa que es privado porque lo pone y luego que aprenda con el hash si quiere pero que sepa el trasfondo del asunto
No es necesario aplicar Solid a todo. Aparte la funcionalidad de un decorador de puede disfrutar a nivel framework. No es tan del programar un decorador todos los dÃas sino usarlo de seguido.
en lo personal, la sintaxis deberÃa estar hecha para humanos, no para mÃĄquinasâĶ el uso de # como privado en JS, no es descriptivo, a menos que sepas la especificaciÃģn de JS. Es decir, el cÃģdigo deberÃa ser fÃĄcil de comprender. Todo parte de una filosofÃa, y necesidades de integraciÃģn tÃĐcnica, entre otrosâĶ
yo uso enum pero acabo de encontrarme con un problema serio y que me veo obligado a "bajar mi consumo de enums" Ejemplo: enum EAnimal = { GATO = "gato", PERRO = "perro", TIGRE = "tigre" } //quiero definir una variable que SOLO acepte un animal domestico let domestico :EAnimal = EAnimal .TIGRE; // â NO quiero que me sugiera tigre, es peligroso. //Usando tipos: type TAnimal = "GATO" | "PERRO" | "TIGRE"; type TAnimalDomestico = Exclude; //solo domÃĐsticos let domestico :TAnimalDomestico = "TIGRE" //ðŦ Error, Tigre NO es domestico; Enum es rÃgido, tipo es flexible y adaptable
DesconocÃa que el # se puede utilizar como modificador acceso de forma nativa en JS y tambiÃĐn los problemas de utilizar las expresiones set y get tus videos se me han hecho interesantes, un saludo amigo
simplemente javascript es sorprendente, siempre en evolucion en su eterna busqueda de ser un lenguaje decente xD... y typescript que ya es algo decente, pero innova para ser cada vez innecesariamente mas "complejo"....
Hola si tengo definido un type, cÃģmo puedo clonar esa estructura hacia una clase? por ejemplo: type persona = { nombre: string edad: number } y lo que deseo obtener es: class persona { nombre: string edad: number }
Team underscore -> __atributo sin dudas el # es muy feo pobrecito, me recuerda un poco al id en css, creo que podrian implementar algo como C++ donde pones private: y todo el codigo que quieras debajo de eso serÃĄ privado, igualmente typescript a muerteðŧ
@@midulive TypeScript es lo que debiÃģ ser JavaScript desde un principio de los tiempos, pero que por razones egoistas no se diÃģ. JavaScript, con su mentira de la flexibilidad, inventÃģ una cantidad de malas prÃĄcticas que nisiquiera se pueden abarcar en un curso dedicado a ello. MuchÃsimas cosas se pudieron hacer y evitar, grandÃsimas cantidades de dinero se pudieron haber ahorrado y se pudo ahorrar el desarrollo de tantas tecnologÃas que hoy se venden como novedosas, cual lo Último en iphone de la semana, y que hacen que millones de personas gasten en cursos y tutoriales billones de dÃģlares y demÃĄs dinero en todas las denominaciones del mundo, tiempo y esfuerzo absurdamente desperdiciado, para que al final se aprendan tecnologÃas sobre del sobre lenguaje que evidentemente son un montÃģn de tapahuecos y parches sobre las embarradas que JavaScript fomenta.
@@midulive El tipado fuerte pudo ser considerado como una manera de establecer seguridad y control, para el uso de variables, objetos y funciones, pero debido a que jamÃĄs se dedicÃģ esfuerzo en ello, se han fomentado las malas prÃĄcticas de la programaciÃģn con un lavado de cerebro brutal, ahora simplemente se consideran como herramientas para ayudar al programador a escribir su cÃģdigo. Incluso se podrÃa establecer mejores funciones y mÃĐtodos del lado del Kernel para optimizar el rendimiento del cÃģdigo, e incluso, existen tÃĐsis que tratan sobre protocolos de comunicaciÃģn mÃĄs ÃĄgiles que se pueden implementar cuando el cÃģdigo fuente posee buenas prÃĄcticas de programaciÃģn en su fondo.
Desde que aprendi typescript y nunca mas volvi a codear en js. Las empresas lo piden y suma bastante saber typescript
Hay un caso de uso concreto donde los namespaces son una bendiciÃģn.
En NGXS a la hora de crear las acciones, que son clases y que tienen todo el sentido tener todos en un Único archivo, el namespace ayuda a poder encapsular todas estas clases en un Único namespace que funciona como una especie de clase padre estÃĄtica donde residen todas las clases de cada una de las acciones y no tener que importarlas una a una, sino con importar todo el namespace ya tienes acceso a todas las acciones
yo creo que cuando el proyecto es muy gigante. es recomendado usar namespace. pero si es un proyecto mediano o pequeÃąo. es mejor hacer los import| export.
Yo despues de ver 5 segundos de video: Muy buen video, sigue asi
El enum tiene un downside no mencionado, y es que si lo defines sin usar const, se transpila en un objeto con todos los key: values, pero si lo defines con const, solo se compilan los usos del mismo. Interesante, no te parece?
Utilizar namespaces puede ser una muy buena prÃĄctica para definir tipos
Yo cuando aprendi Unity con C# y vi los namespace tenia miedo. Hasta el dia de hoy sigo sin entender para que sirven pero mejor los tengo ahi sin tocar nada
Estoy de acuerdo con todo lo que se expone aquÃ, aunque podrÃa opinar acerca de los namespaces si se me permite.
Estos son mÃĄs una forma de organizar proyectos en los que existe una gran cantidad de clases que muchas veces no se sabe de donde vienen, si son nuestras o de librerÃas third party.
No es comÚn en Javascript/Typescript pero es una prÃĄctica que se lleva a cabo de antaÃąo un lenguajes como C# y Java (los padres de Typescript). Aunque entiendo que Javascript ya contaba con mÃģdulos que hacÃan algo muy similar.
Es un error pensar que un namespace solo puede vivir en un archivo. Y La verdad serÃa mala prÃĄctica tener todas las clases/mÃĐtods de un namespace en un mismo archivo. Mis condolencias al que tenga que mantener eso.
Un ejemplo Útil podrÃa ser que si escribo una librerÃa de conversiÃģn de archivos multimedia, podrÃa tener los siguientes archivos.
- namespace Converter.Audio:
- - MP3Converter.ts : namespace Converter.Audio { export class MP3Converter { ... } }
- - OGGConverter.ts : namespace Converter.Audio { export class OGGConverter { ... } }
- namespace Converter.Video:
- - MP4Converter.ts : namespace Converter.Video { export class MP4Converter { ... } }
- - MOVConverter.ts : namespace Converter.Video { export class MOVConverter{ ... } }
Y para usarlo en mi "codigo cliente" serÃa:
import Audio = Converter.Audio; // imports
import Video = Converter.Video; // imports
... { code here } ...
new Audio.MP3Converter();
new Audio.OGGConverter();
y...
new Video.MP4Converter();
new Video.MOVConverter();
... { code here } ...
Sinceramente lo Único que no me gusta de esto, es tener que llamar al namespace antes de llamar a la clase, pero tiene sentido para evitar que dos clases con el mismo nombre en diferentes "paquetes" entren en conflicto.
confirmo el ejercicio de la prueba tecnica 22:03
Cual es el nombre del tema para visual code que usas amigo ?
solo se eliminaria si es un 'const enum', de otra forma usa un diccionario
Soy fan de tus videos... DespuÃĐs de escuchar el video me he quedado con la mosca sobre los decoradores. EstarÃa genial que hicieras un video explicativo porque es algo interesante. ÂĄGracias! Y enhorabuena por el canal!! Happy coding!
Es que no entiendo porque mezclar los usos. Una cosa es que un framework te de decoradores para extender clases propiedades etc para poder hacer cosas en automÃĄtico (definidas por el framework) y otra es que uno de ponga constante a programar todo con decoradores.
Decorator es un patrÃģn de diseÃąo que permite agregar responsabilidades de manera dinamica
@midulive midu, tengo entendido que los emuns de typescript se compilan a JS, en forma de funcion. me parece haberlo visto de hecho en playground oficial, asi que no tiene costo 0. saludos!
Interesante, en tu opiniÃģn es buena o mala prÃĄctica?, donde usaste el playground?
Buenas, has visto los modulos federados, vas a sacar video de ellos?
yo tengo un problema con el linter y los enums... siempre me dicen que el valor no se estÃĄ usando... cual seria el problema?
:thinking
Aquà en MÃĐxico cuando uno dice "Si no les gusta, pues nada" es "Si no les gusta, pues a chingar a m4dre", cuando lo dices pienso que dirÃĄs eso jajajajajaja excelente video
Esbuild es una gran herramienta para transpilar typescript super rÃĄpido, pero no soporta algunas cosas de typescript como los decoradores.
Los namespaces podrÃas usaarlos como en c#
Un namespace no solo es usado para encapsular funcionalidades, de hecho esa cualidad es secundaria. El objetivo real de un namespace es poder definir una funciÃģn con el mismo nombre y parÃĄmetros pero con diferente implementaciÃģn en 2 o mÃĄs mÃģdulos. Claro que estÃĄ opciÃģn es aplicable cuando el polimorfismo no puede ser usado.
Un buen ejemplo de uso de namespace es cuando se necesita enviar informaciÃģn por medio de diferentes canales de comunicaciÃģn, los cuales siempre tienen las mismas funcionalidades, get, post, send, receive etc, pero con la diferencia de que la implementacion para cada canal es totalmente diferente y usan diferentes APIs. en ese caso el polimorfismo no es aplicable solamente se puede resolver con namespaces, claro, si es que no se quiere tener un nombre de funciÃģn diferente para cada canal de comunicaciÃģn.
namespace Serial
{
export function receive(s: string){
//implementaciÃģn para recibir data por puerto serial
}
}
namespace Socket
{
export function receive(s: string){
//implementaciÃģn para recibir data por socket
}
}
Esto viene de C++, verdad? o recuerdo mal.
Muy buen video! Concuerdo en que todas las razones para no usar Typescript no tienen sentido.
Entiendo que este video tiene bastante tiempo pero realmente no estoy para nada de acuerdo respecto a las properties.
Es importante entender desde mi punto de vista que aclaraste respecto a JS pero por otro lado es importante entender para que sirven, el rol de las properties es para poder generar abstracciones en donde su especificacion este 100% separada de su implementacion. Claramente este concepto en JS no tiene mucho sentido pero en Typescript cobra una fuerza muy grande ya que podes tener diferentes implementaciones que respeten una misma interfaz en donde su estado puede ser diferente.
Lo tÃpico, si quieres algo similar a enums usar propiedades estÃĄticas
private verboso? El private es unaa sintaxis comÚn de los lenguajes de programaciÃģn orientados a objetos, y los lenguajes de programaciÃģn orientados a objetos de por si son verbosos .Luego vamos a tener tipos de datos de javascript como: i, f, d, s, da, b, y c, para que no sean tan verbosos porque int, float, double, string, date, boolean y char son verbosos.
TÚ lo dijiste, para esos lenguajes, JavaScript no es un lenguaje orientado a objetos, sino a prototipos. Me encanta C#, pero son diferentes; tambiÃĐn, el # permite identificar visualmente una propiedad privada al usarse y no solo al declararse, Útil en un lenguaje dinÃĄmico como JS.
Minudev , excelente aporte y video!!, no me digas que te pasaste ya a typescript o le estas hechando ojitos para usarlo pronto en tu dia a dia?? ðĪĢðĪĢ
Js deberia ser ts nativo sin transpilador, y al menos dejar las malas prÃĄcticas en js he encontrado code que madre mia calladito me quede para no discutir o caer mal a los otro programadores al final node deberÃa permitir de forma nativa y el tipado debe estar en tiempo de ejcucion y la llamada de error por que muchas veces no coincide la linea de error del codigo con el transpilado
A mi no me gustan los enums porque tenes que exportarlos por toda la aplicaciÃģn. Prefiero declarar un type con ORs de las cadenas vÃĄlidas
Yo pienso parecido. No me funciona igual que otro lenguaje. Y aparte dÃģnde lo necesite me sirviÃģ mucho usar keyoff en vez de un enum.
Los decoradores muchas veces rompen SOLID porque hacen magias que dotan de segundas finalidades a una clase, un repositorio es un repositorio no es un repositorio que a su vez publica mensajes en rabbit y que a su vez manda un mail
Las cosas tienen su razÃģn de ser y su sitio donde ir, no confundamos resolutividad con chapuceria
En cuanto a lo de private estoy en desacuerdo porque mejor un codigo que se explica solo que un cÃģdigo que hay que adivinar, hay que programar tambiÃĐn pensando en los demÃĄs y si viene un junior al equipo mejor que de primeras sepa que es privado porque lo pone y luego que aprenda con el hash si quiere pero que sepa el trasfondo del asunto
No es necesario aplicar Solid a todo. Aparte la funcionalidad de un decorador de puede disfrutar a nivel framework. No es tan del programar un decorador todos los dÃas sino usarlo de seguido.
buen videoð
Eres un duro!
lo de los enums creo ya lo solucionaron, ahora ya estan fuertemente tipados
en lo personal, la sintaxis deberÃa estar hecha para humanos, no para mÃĄquinasâĶ el uso de # como privado en JS, no es descriptivo, a menos que sepas la especificaciÃģn de JS. Es decir, el cÃģdigo deberÃa ser fÃĄcil de comprender. Todo parte de una filosofÃa, y necesidades de integraciÃģn tÃĐcnica, entre otrosâĶ
Coincido, me parece mucho mÃĄs descriptivo el uso de private
public static void main(String[] args) enjoyers be like..
-1 al argumento sobre los enums, para mà son la vida ð
Pienso igual!
yo uso enum pero acabo de encontrarme con un problema serio y que me veo obligado a "bajar mi consumo de enums"
Ejemplo:
enum EAnimal = {
GATO = "gato",
PERRO = "perro",
TIGRE = "tigre"
}
//quiero definir una variable que SOLO acepte un animal domestico
let domestico :EAnimal = EAnimal .TIGRE; // â NO quiero que me sugiera tigre, es peligroso.
//Usando tipos:
type TAnimal = "GATO" | "PERRO" | "TIGRE";
type TAnimalDomestico = Exclude; //solo domÃĐsticos
let domestico :TAnimalDomestico = "TIGRE" //ðŦ Error, Tigre NO es domestico;
Enum es rÃgido, tipo es flexible y adaptable
DesconocÃa que el # se puede utilizar como modificador acceso de forma nativa en JS y tambiÃĐn los problemas de utilizar las expresiones set y get tus videos se me han hecho interesantes, un saludo amigo
Totalmente de acuerdo que estupide de razÃģn para np usar enum.... no usemos ts y listo claro
typescript es tu 9/10 solucion >o< pa esas mierdas
simplemente javascript es sorprendente, siempre en evolucion en su eterna busqueda de ser un lenguaje decente xD...
y typescript que ya es algo decente, pero innova para ser cada vez innecesariamente mas "complejo"....
Hola si tengo definido un type, cÃģmo puedo clonar esa estructura hacia una clase? por ejemplo:
type persona = {
nombre: string
edad: number
}
y lo que deseo obtener es:
class persona {
nombre: string
edad: number
}
Team underscore -> __atributo sin dudas
el # es muy feo pobrecito, me recuerda un poco al id en css, creo que podrian implementar algo como C++
donde pones private: y todo el codigo que quieras debajo de eso serÃĄ privado, igualmente typescript a muerteðŧ
El # para los private es un "Anti-Pattern" ð bromeando.
Namespace es util cuando se trabaja en equipo y luego hay que unir los mÃģdulos
ÂŋPor quÃĐ mierdas estandarizaron JavaScript con tantas porquerÃas?
Eso no es JavaScript. Es TypeScript.
@@midulive TypeScript es lo que debiÃģ ser JavaScript desde un principio de los tiempos, pero que por razones egoistas no se diÃģ.
JavaScript, con su mentira de la flexibilidad, inventÃģ una cantidad de malas prÃĄcticas que nisiquiera se pueden abarcar en un curso dedicado a ello.
MuchÃsimas cosas se pudieron hacer y evitar, grandÃsimas cantidades de dinero se pudieron haber ahorrado y se pudo ahorrar el desarrollo de tantas tecnologÃas que hoy se venden como novedosas, cual lo Último en iphone de la semana, y que hacen que millones de personas gasten en cursos y tutoriales billones de dÃģlares y demÃĄs dinero en todas las denominaciones del mundo, tiempo y esfuerzo absurdamente desperdiciado, para que al final se aprendan tecnologÃas sobre del sobre lenguaje que evidentemente son un montÃģn de tapahuecos y parches sobre las embarradas que JavaScript fomenta.
@@midulive El tipado fuerte pudo ser considerado como una manera de establecer seguridad y control, para el uso de variables, objetos y funciones, pero debido a que jamÃĄs se dedicÃģ esfuerzo en ello, se han fomentado las malas prÃĄcticas de la programaciÃģn con un lavado de cerebro brutal, ahora simplemente se consideran como herramientas para ayudar al programador a escribir su cÃģdigo.
Incluso se podrÃa establecer mejores funciones y mÃĐtodos del lado del Kernel para optimizar el rendimiento del cÃģdigo, e incluso, existen tÃĐsis que tratan sobre protocolos de comunicaciÃģn mÃĄs ÃĄgiles que se pueden implementar cuando el cÃģdigo fuente posee buenas prÃĄcticas de programaciÃģn en su fondo.
Los militares siempre se llevan las mejores tecnologÃas. ð