@@Hanielhernandez-eh7es Ve los videos de este canal tiene muchos ejercicios que son fundamentos que se ocupan en proyectos reales y si puedes comprate el curso de patrones de diseño
la de funciones genericas es algo que es muy util aunque no parezca, es decir el paso de tipos los utilizamos mucho en validaciones fluent, en interfaces genericas que implementa la interfaz de cada servicio, como un CRUD, repositorios, y mas
muy buen video!!! en la asignación del name podrias haber usa el operador ??= para seguir usando la misma variable category e imprimirla. category ??= "Otra"
En .NET 7+ puedes utilizar la interfaz IAdditionOperators porque en realidad dynamic es una mala práctica a nivel de rendimiento ya que sólo hasta que se ejecuta la función y se intenta ejecutar esa línea el sistema podrá saber cómo la ejecuta por lo que siempre se compila (se vuelve lenguaje interpretado). En un entorno con JIT no debería representar mucho problema si no se abusa de este recurso (porque la gracia del CLR es en general tener instrucciones deterministas una vez se interprete el IL) pero en un entorno AOT sería imposible de lograr pues todo debe estar estáticamente compilado.
Bro si sabes Java entiendes claramente lo que esta haciendo porque eso también se ve en Java: Genéricos, Programación Funcional, Operadores Ternarios. Lo que cambia es el azúcar sintáctico propio de C# pero el fundamento es el mismo, yo no se nada de C# pero entiendo muy bien lo que esta haciendo, por eso es importante aprender conceptos en vez de código. Saludos!!
LINQ está bueno para simplificar código, pero un consejo que puedo dar, es hacer benchmark si la performance de esa función es importante, porque hay veces que es menos performante LINQ que un foreach.
Creo qué en Súper Collider basado en C y otro qué no recuerdo haces un envolvente de frecuencias de sonido en un todo para no hacerlo cada uno x separado súper collider es software para producción musical y audiovisual
El caso de los switch, eso está muy bien para enumerados consecutivos pero ¿Cómo actuas si tienes, por ejemplo, órdenes? Imagina que tienes una public void OperarConFichero(string accion, string rutaFichero) donde acción puede ser "Copiar", "Mover", "Borrar" ¿Cómo pasamos esos cases o ifs a Action[]?
Otra forma es separar el action del void: public void OperarConFichero(string accion, string rutaFichero) => GetOpration(accion, rutaFichero)(); public Action GetOpration(string accion, string rutaFichero) => accion switch { "copiar" => () => copiar(rutaFichero), "mover" => () => mover(rutaFichero), _ => throw new Exception("Acción no reconocida") }
En el patrón strategy no veo que se “reduzca” código. Más bien veo más ordenado. Antes que tener un switch con código que lo tienes que leer para saber que hacen, tienes un array (que lo podrías poner un nombre a cada función incluso). Incluso podrías mantener el switch y ejecutar según la key que tengas y listo. Resumen más que reducir, se ordena mejor el código
Alv. Hubo 2 o 3 q no los conocia. Yo trabajo con python. Pero si es verdad que siempre q puedas usar prog funcional es mejor hacerlo porq son algoritmos q ya estan optimizados y va a ser que tu codigo funcione mejor y utilice menos memoria.
Mis Cursos de Programación: hdeleon.net/cursos-premium/
Mi Libro de C#: hdeleon.net/libro-aprender-a-programar-con-c-hector-de-leon/
Para el último ejemplo, en casos numeros puedes utilizar la interfaz INumber
public T Add(T a, T b) where T : INumber
{
return a + b;
}
Tengo más de 12 años programado en C# y siempre que veo tus videos aprendo algo nuevo
Yo apenas tengo 6 meses y siento que no avanzo quiero comenzar a trabajar
!Hola¡ Ya llevo 1 año utilizando c#, sin embargo me siento atascado, me podrías dar algún tipo? Por favor
@@Hanielhernandez-eh7es Ve los videos de este canal tiene muchos ejercicios que son fundamentos que se ocupan en proyectos reales y si puedes comprate el curso de patrones de diseño
la de funciones genericas es algo que es muy util aunque no parezca, es decir el paso de tipos los utilizamos mucho en validaciones fluent, en interfaces genericas que implementa la interfaz de cada servicio, como un CRUD, repositorios, y mas
Si, para el ahorro de codigo es de gran ayuda los genericos en los CRUD
Excelente explicación, los genéricos está padre su uso y tú explicación
otra alternativa al dynamic puede ser indicando: where T : INumber aunque solo se puede usar a partir de NET 7, saludos crack
las funciones genericas evaluando el struct esa no me la sabia, y se ve muy util
Excelente video, Excelente explicación
Excelente, muchas gracias.
Excelente contenido, en la alternativa al switch, en algunos contextos, se podría usar un diccionario para una clave distinta a un int.
Siempre aprendo algo nuevo con Hector, por lo menos lo del patrón de diseño strategy no me lo conocía muchas gracias!
Muy buen video Hector, no hay nada mejor que un codigo elegante
excelente informacion, me gusto el array de actions
Muy buenos consejos, gracias.
Gracias Cabeza, el patron estrategia es una maravilla para controlar multiples opciones de escenario.
muy buen video!!! en la asignación del name podrias haber usa el operador ??= para seguir usando la misma variable category e imprimirla. category ??= "Otra"
Estuve usando esta práctica y funcionan de maravilla hasta logré juntar 30 métodos en uno, con pocas líneas de codigos
Aprendí muchísimo me ha servido
Yo uso mas C++ pero me gusto lo del array de funciones. Podria usarlo para array de lambdas.
Actions y Cool!
Maestro voy a probar lo de las actions en el switch case para mi app de menú hoy es viernes
excelente! gracias!
Lo último lo sabía pero nunca lo había implementado así, siempre hice overwrite de funciones
Lo del array de funciones está brutal
Muy buen video.
excelente contenido
En .NET 7+ puedes utilizar la interfaz IAdditionOperators porque en realidad dynamic es una mala práctica a nivel de rendimiento ya que sólo hasta que se ejecuta la función y se intenta ejecutar esa línea el sistema podrá saber cómo la ejecuta por lo que siempre se compila (se vuelve lenguaje interpretado).
En un entorno con JIT no debería representar mucho problema si no se abusa de este recurso (porque la gracia del CLR es en general tener instrucciones deterministas una vez se interprete el IL) pero en un entorno AOT sería imposible de lograr pues todo debe estar estáticamente compilado.
Me escuece que esté en C#.
Pero como Java y C# son hermanos de diferente padre, seguro que lo mostrado se puede replicar.
Muchas gracias!
Te pierdes mucho contenido de calidad si necesitas que esté en tu lenguaje. Yo ni sé C# y aprendo mucho igual
Bro si sabes Java entiendes claramente lo que esta haciendo porque eso también se ve en Java: Genéricos, Programación Funcional, Operadores Ternarios.
Lo que cambia es el azúcar sintáctico propio de C# pero el fundamento es el mismo, yo no se nada de C# pero entiendo muy bien lo que esta haciendo, por eso es importante aprender conceptos en vez de código.
Saludos!!
Que nos hacemos sin Héctor
muy bueno, me sirve xD!!
Gracias Héctor! Por el video como siempre de calidad
en el switch, el if/else que pusiste, pudiste haber escrio esa parte con un operador ternario.. quedando esa parte a una linea en lugar de 8 😎
Así es, gracias
Gran video hermoso
aprendiste algo? aprendi muchisimo!
Siempre aprendiendo algo nuevo!
Y que también Nicolás es un 🦖 y Moure mide 1.46
toma tu pulgar!
Todas esas venía usando, lo que hay que tener cuidado es al usar programación funcional.
LINQ está bueno para simplificar código, pero un consejo que puedo dar, es hacer benchmark si la performance de esa función es importante, porque hay veces que es menos performante LINQ que un foreach.
En PHP se puede?
Muy buen video
Pero yo recomiendo siempre tratar de dejar de usar else
Veré si aplico el punto del case ya tenemos algunos que se están volviendo infinitos
Está cool
Aprendi algo!!!!
Creo qué en Súper Collider basado en C y otro qué no recuerdo haces un envolvente de frecuencias de sonido en un todo para no hacerlo cada uno x separado súper collider es software para producción musical y audiovisual
Exquisito video, menos código… más gatitos!
El caso de los switch, eso está muy bien para enumerados consecutivos pero ¿Cómo actuas si tienes, por ejemplo, órdenes? Imagina que tienes una public void OperarConFichero(string accion, string rutaFichero) donde acción puede ser "Copiar", "Mover", "Borrar" ¿Cómo pasamos esos cases o ifs a Action[]?
public void OperarConFichero(string accion, string rutaFichero)
{
Action resutl = accion switch
{
"copiar" => () => copiar(rutaFichero),
"mover" => () => mover(rutaFichero),
_ => throw new Exception("Acción no reconocida")
};
resutl();
}
Otra forma es separar el action del void:
public void OperarConFichero(string accion, string rutaFichero) => GetOpration(accion, rutaFichero)();
public Action GetOpration(string accion, string rutaFichero) => accion switch
{
"copiar" => () => copiar(rutaFichero),
"mover" => () => mover(rutaFichero),
_ => throw new Exception("Acción no reconocida")
}
Yo también vengo de esa época, aplicativos y librerías jjjh
Fue como un regaño con cariño 😅
En el patrón strategy no veo que se “reduzca” código. Más bien veo más ordenado. Antes que tener un switch con código que lo tienes que leer para saber que hacen, tienes un array (que lo podrías poner un nombre a cada función incluso).
Incluso podrías mantener el switch y ejecutar según la key que tengas y listo.
Resumen más que reducir, se ordena mejor el código
Es una equivalencia con programación funcional a strategy, no es strategy.
Gracias 🎉
Que guapo te vez hoy.
Me cae super bien jajajaj
🔥
Resumen del video: " ?"
la edad de Nicholas Schurman xddddd
Aprendi algo
0:44 Pensé que era más grande jeje
yo tambien soy viejo, me dijo un integrante de mi equipo, puro viejo toma cafe negro jajaja
Alv. Hubo 2 o 3 q no los conocia. Yo trabajo con python. Pero si es verdad que siempre q puedas usar prog funcional es mejor hacerlo porq son algoritmos q ya estan optimizados y va a ser que tu codigo funcione mejor y utilice menos memoria.
Ay, ¡Qué guapo te ves hoy!
yo no se que pasa que cuanto menos código escribo al final termino escribiendo más código
Aprendí algo, ahora enséñame a conseguir un trabajo jajaja 😂
string aprendisteAlgo = "bien" ?? "ver de vuelta";
Yo pensaba que Nicolas Schurman tenía 180, esta más joven entonces.
¿No pierdes algo de seguridad de tipos con lo último? Se podría ejecutar con algo que no admita sumas creo
PD: Ay qué guapo te ves hoy
Entonces usa where INumber
Hay que guapo te vez hoy!.
Ay qué guapo te ves hoy 👍
Al que le pagan por líneas de código: Está información no vale millones
Ay, que guapo te ves hoy!!
Hay que guapo te ves hoy😂
Como?ya no se llaman librerías ni aplicaciones 😮😮😮, tonces soy vieja😂😂😂
que guapo
Que trucazos