Curso C#. Delegados predicados y lambdas II. Vídeo 68

แชร์
ฝัง
  • เผยแพร่เมื่อ 20 ก.ย. 2024
  • En este vídeo vemos los delegados-predicados. Con dos ejemplos sencillos vemos la sintaxis y uso de estas estructuras.
    Para más cursos, ejercicios y manuales visita: www.pildorasinformaticas.es

ความคิดเห็น • 69

  • @Zeky
    @Zeky 5 ปีที่แล้ว +23

    Siga así profesor, espero que dentro de un año lleguemos a los 200 vídeo de C#
    Saludos.

  • @smokingcrimson128
    @smokingcrimson128 2 ปีที่แล้ว +3

    hice lo de los números primos, pero con números hasta el cien, en realidad funciona hasta el número que quieras jeje, una vez más gracias por tan buenas lecciones Juan:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    namespace Delegados
    {
    internal class Program
    {
    static void Main(string[] args)
    {
    List numOnetoTen = new List();
    for (int i = 0; i < 101; i++)
    {
    numOnetoTen.Add(i);
    }
    //Declaramos Predicado:
    Predicate numPares = new Predicate(returnPar);
    List numParesOneToTen = numOnetoTen.FindAll(returnPar);
    foreach (int i in numParesOneToTen)
    {
    if (i != numParesOneToTen.Last()) Console.Write(i + ", ");
    else Console.Write(i + ".");
    }
    Console.ReadKey(true);
    }
    static bool returnPar(int num)
    {
    int contador = 0;
    int divisor = 1;
    for (int i = 0; i < num; i++)
    {
    if (num % divisor == 0) contador++;
    divisor++;
    }
    if (contador == 2) return true;
    else return false;
    }
    }
    }

  • @elvingonzalez8932
    @elvingonzalez8932 5 ปีที่แล้ว +11

    Excelente..
    Por favor ayudarnos un poco mas con C# y la cantidad de videos.. es que lo necesitamos mucho. Entiendo que no es fácil por el poco tiempo de disposición pero lo agradeceremos mucho...

  • @Jocker88
    @Jocker88 4 ปีที่แล้ว +8

    Entre esta clase, los delegados y los genéricos, estoy haciendo un código en un proyecto que tengo que en mi vida he hecho algo TAN reutilizable, estas últimas clases que he visto son oro, no sabía ni que existian estas cosas en C#, malos vicios de otros lenguajes.
    P.D. Gran explicación :), nunca me cansaré de decir lo bien que explicas y lo explicativos que son tus ejemplos.

  • @omarsanchezcuevas8309
    @omarsanchezcuevas8309 ปีที่แล้ว +1

    Leyendo la documentación pude hacer los pases Desde el 7:55 hasta 9:25 sin haber visto antes esa parte ( aunque utilizando el for). Ya es un avance 😁

  • @sudh3444
    @sudh3444 5 ปีที่แล้ว +1

    Pedazos de cursos estos, apenas voy por el de Java, pero estoy pendiente de todos tus aportes que algún día tambien estudiaré; definitivamente sos un dios man, creo que te quiero como familia, como mi hermano, es más creo que te quiero más que a mi familia que vive en España, tal vez un día no muy lejano ande por allá y tenga el gusto de conocerte. Saludos hermano, cuidate y muchos éxitos más...

  • @jomarcordero4515
    @jomarcordero4515 4 ปีที่แล้ว +8

    Para mejor simplicidad retornando valores bool
    static bool EsPar(int num)
    {
    return num % 2 == 0;
    }
    static bool ExisteJuan(Persona persona)
    {
    return persona.Nombre == "Juan";
    }

  • @victorh.lopezchavez4229
    @victorh.lopezchavez4229 ปีที่แล้ว

    Muchas gracias por tan valioso video... en verdad explicas de lo mejor!

  • @reynablacidoaparicio1892
    @reynablacidoaparicio1892 2 หลายเดือนก่อน

    Excelentes video!

  • @acaraballo
    @acaraballo 3 ปีที่แล้ว +2

    28/10/2020 : Gracias a tus vídeos he avanzado mucho. Tengo 31 años y hace aproximadamente un año he entrado en lleno al mundo de la programación.
    Faltaron las excepciones y algunos detalles:
    using System;
    using System.Collections.Generic;
    namespace ValidarDatos
    {
    class Programs
    {
    static void Main(string[] args)
    {
    Console.WriteLine("Introduce nombre y edad primera persona:");
    Personas p1 = new Personas();
    p1.Nombre = Console.ReadLine();
    p1.Edad = Int32.Parse(Console.ReadLine());
    Console.WriteLine("Introduce nombre y edad segunda persona:");
    Personas p2 = new Personas();
    p2.Nombre = Console.ReadLine();
    p2.Edad = Int32.Parse(Console.ReadLine());
    Console.WriteLine("Introduce nombre y edad tercera persona:");
    Personas p3 = new Personas();
    p3.Nombre = Console.ReadLine();
    p3.Edad = Int32.Parse(Console.ReadLine());
    List listadoPersonas = new List();
    listadoPersonas.AddRange(new Personas[] { p1, p2, p3 });
    Predicate predicadoNombre = new Predicate(fnValidarNombre);
    Predicate predicadoEdad = new Predicate(fnValidarEdad);
    bool validarNombre = listadoPersonas.Exists(predicadoNombre);
    if (validarNombre) Console.WriteLine("Existen personas con el nombre de El Pepe");
    else Console.WriteLine("No existe persona con el nombre de Juan");
    bool validarEdad = listadoPersonas.Exists(predicadoEdad);
    if (validarEdad) Console.WriteLine("Existen personas menores de edad");
    else Console.WriteLine("No existen personas menores de edad");
    }
    class Personas
    {
    private string nombre;
    private int edad;
    public string Nombre { get => nombre; set => nombre = value; }
    public int Edad { get => edad; set => edad = value; }
    }
    static bool fnValidarNombre(Personas persona)
    {
    if (persona.Nombre == "El Pepe") return true;
    else return false;
    }
    static bool fnValidarEdad(Personas persona)
    {
    if (persona.Edad < 18) return true;
    else return false;
    }
    }
    }

  • @xavisanchezgimenez209
    @xavisanchezgimenez209 2 ปีที่แล้ว

    Muy grande, gracias por los cursos tienes infinitamente todos mis likes 🥰

  • @pablofonseca8867
    @pablofonseca8867 3 ปีที่แล้ว

    Esto es súper útil, wow Juan muchas gracias por compartirnos tu conocimiento.

  • @ghss5088
    @ghss5088 3 ปีที่แล้ว +1

    Este es mi segundo comentario con referencia a Java, pero uno hace esta comparación ya que en para usar Predicados en java tu necesitas implementar un Stream o a la lista pasarla a stream(), pero C# lo tiene un la misma interface de List

  • @nicolacho87
    @nicolacho87 4 ปีที่แล้ว

    Muchas gracias por sus videos he aprendido mucho.
    Yo hice el de los números primos apoyándome de lo que hiciste en este video solo que yo le doy la opción de dar el rango:
    using System;
    using System.Collections.Generic;
    namespace DelegadosPredicados
    {
    class Program
    {
    static void Main(string[] args)
    {
    // Programa para mostrar la lista de numeros primos dando el numero hasta donde quiere que se muestre:
    Console.WriteLine("Ingrese el numero hasta el cual quiere que se muestre los numeros primos.");
    int p = int.Parse(Console.ReadLine());
    List listaNumeros = new List();

    for(int i = 1; i

  • @magdalenogarcia7879
    @magdalenogarcia7879 3 ปีที่แล้ว +1

    Muy buena explicación, saludos.

  • @williamortega8494
    @williamortega8494 5 ปีที่แล้ว +2

    Muy buen video como siempre :)...Supongo que luego vendran los action y func...

  • @mralexander9711
    @mralexander9711 3 ปีที่แล้ว

    Muchas gracias amigo. ¡Enseñas muy bien!

  • @manuelsantiagoojedaperez2180
    @manuelsantiagoojedaperez2180 3 ปีที่แล้ว +4

    el metodo para definir si es primo lo saque asi
    for(int divisor=1 ; divisor

    • @aliciabuendia872
      @aliciabuendia872 3 ปีที่แล้ว

      Hola Manuel, sé que tu comentario es viejo, pero me serviría muchísimo si pudieras contestar a lo siguiente: ¿Por qué funciona si la condición if para que sean primos es true, pero retorna falso?

    • @manuelsantiagoojedaperez2180
      @manuelsantiagoojedaperez2180 3 ปีที่แล้ว +1

      @@aliciabuendia872 hola alicia, la funcion esta pensada para que sea tipo boolean. Haces una llamada desde el metodo main y le das el numero que queres saber si es primo o no como parametro

    • @manuelsantiagoojedaperez2180
      @manuelsantiagoojedaperez2180 3 ปีที่แล้ว +1

      Y el metodo te responde true, si es primo o false si no lo es

    • @aliciabuendia872
      @aliciabuendia872 3 ปีที่แล้ว

      @@manuelsantiagoojedaperez2180 ¡Muchas gracias!

  • @TonicoBonico
    @TonicoBonico 2 ปีที่แล้ว

    Un máquina el caballero.

  • @roderickmedina6970
    @roderickmedina6970 4 ปีที่แล้ว +1

    buen vídeo, muchas gracias por el contenido

  • @CarlosHernandez-xs6py
    @CarlosHernandez-xs6py 5 ปีที่แล้ว +1

    Muy buen video como siempre

  • @rodrigomarsan1143
    @rodrigomarsan1143 3 ปีที่แล้ว +1

    Consulta, pueden agregarse más predicados por método? Por ejemplo, comprobar si existe alguien que se llama Juan y tiene más de 18 años, o si hay números primos mayores de 10. Tal vez encadenando predicados?

  • @elsavictoriabarraganoliver7153
    @elsavictoriabarraganoliver7153 4 ปีที่แล้ว +1

    Excelente! Gracias mil.

  • @alfonsolara4592
    @alfonsolara4592 3 ปีที่แล้ว

    Excelente clase profesor!

  • @stevenrocha7482
    @stevenrocha7482 5 ปีที่แล้ว

    gracias, sigo su curso y otros más.

  • @azudevcr
    @azudevcr 11 หลายเดือนก่อน

    Se puede simplificar un poquito mas así:
    static bool DamePares(int num) => num % 2 == 0;

  • @marlonjosevillamizar1556
    @marlonjosevillamizar1556 5 ปีที่แล้ว +4

    Hola profe, me gustaría saber si va a haber un vídeo sobre hilos. Gracias...

  • @arielizurieta9110
    @arielizurieta9110 3 ปีที่แล้ว

    Gracias !

  • @santiagobedoyaa.8197
    @santiagobedoyaa.8197 3 ปีที่แล้ว

    Miré la página y no hay curso tutorizado de C#. Quisiera que lo hubiera para tener ejercicios y acompañamiento del profesor. Espero lo ofrezca pronto!

  • @JohanRobayo10
    @JohanRobayo10 ปีที่แล้ว

    Para agregar algo en lo que se dice en el minuto 10:09, el 1 no es considerado un número primo.
    static bool Primos(int num) {
    bool bandera = false;
    int count = 0;
    for (int i = 1; i

  • @jorgecortinas
    @jorgecortinas ปีที่แล้ว

    10:11 pequeño detalle, el 1 no es primo

  • @franciscocruzarriero9951
    @franciscocruzarriero9951 4 ปีที่แล้ว +3

    Excelente, como todo tu trabajo,
    Pero tengo un pregunta, se puede pasar parámetros para que no sean fijos como el de Juan y que sea dinámico a la hora de preguntar?
    Gracias por todo
    Y sigue así

    • @Bola10010
      @Bola10010 3 ปีที่แล้ว

      supiste si se puede?? ando viendo esa parte

    • @barbiechm08
      @barbiechm08 2 ปีที่แล้ว

      @@Bola10010 hay un tipo de dato llamado dynamic, creo, ese funcionaría si es a lo que te refieres

  • @leomarqz
    @leomarqz 2 ปีที่แล้ว

    El uso de predicate y findall se me hace similar al funcionamiento de filter en Javascript

  • @Bola10010
    @Bola10010 3 ปีที่แล้ว +1

    Hola Juan, hay alguna forma de saber por ejemplo si existe un Juan y el tiene mas de 18 años, o solo puede evaluar a toda la lista.
    Saludos

  • @JavvaC23
    @JavvaC23 ปีที่แล้ว

    Hola Juan, tengo una duda, me confunde un poco que tenemos que declarar Predicate y lo que recibe es una función de tipo bool, cual es la necesidad de la clase Predicate sobre por ejemplo imaginando que los métodos .FindAll( ) y .Exist( ) recibieran una función de tipo bool directamente en lugar de un Predicate?

    • @pildorasinformaticas
      @pildorasinformaticas  ปีที่แล้ว +1

      Predicate es un delegado que encapsula un método que toma un parámetro y devuelve un valor booleano. Esencialmente, Predicate es una definición para una función que toma un argumento de tipo T y devuelve un booleano.
      public delegate bool Predicate(T obj);
      Cuando pasas un Predicate a métodos como List.FindAll() o List.Exists(), estás pasando una función que estos métodos utilizarán para evaluar cada elemento de la lista.
      Podrías preguntarte, ¿por qué no sólo pasar una función booleana directamente? Bueno, técnicamente, eso es lo que estás haciendo. Predicate es esencialmente una manera de definir el tipo de esa función booleana.
      Decir que un método toma un Predicate es simplemente una forma de decir que toma una función que acepta un argumento de tipo T y devuelve un booleano. Hace que el código sea más claro y expresivo, porque sabes exactamente qué tipo de función necesitas pasar.
      Esencialmente, los delegados como Predicate, Func, Action etc., son formas en C# de tratar las funciones como objetos de primera clase, lo que significa que puedes pasar funciones como argumentos, almacenarlas en variables y así sucesivamente. Esta es una característica clave de la programación funcional.
      Además, Predicate añade claridad semántica. Sabes que se espera que una función que acepta un T y devuelve un bool haga una evaluación de verdad sobre T, en otras palabras, es un "predicado". ¡Saludos!

    • @JavvaC23
      @JavvaC23 ปีที่แล้ว

      @@pildorasinformaticas Muchas gracias Juan!, "pasar funciones como argumentos", lo se hacer en javascript pero en C# por lo que veo se ocupan más pasos, solo me falta ver la parte de Unity, me agrado bastante el curso ahora que regrese a la programación, tenia 2 años sin programar luego de terminar la universidad que fue justo cuando empezó el covid-19.
      Creí que nunca le entendería muy bien a lenguajes como Java, pero en esta segunda vuelta con C# me agradó bastante, la forma de construir una interfaz gráfica fue mucho más intuitiva/fácil con XAML, que cuando utilicé Swing en Java durante la universidad.
      Anteriormente hace algunos 6 años tomé un curso de Unity, pero no sabía C#.
      Saludos también!

  • @sleter2929
    @sleter2929 3 ปีที่แล้ว

    entonces, los delegado predicado son como filtros?

  • @AndresIsMe
    @AndresIsMe 5 ปีที่แล้ว

    copado, gracias

  • @myaccountofpc3284
    @myaccountofpc3284 5 ปีที่แล้ว

    porfin entiendo el tema

  • @Juanda-30
    @Juanda-30 ปีที่แล้ว

    osea según lo que entiendo los delegados y los predicados son referencias: delegado a metodos void o tipo de dato y predicado referencia a metodos booleanos pero lo que no entiendo es para que tendria que usar una referencia en ves de usar el metodo original? para recordarme de que es lo que hace el metodo o que?

    • @RobertoTexis-h5i
      @RobertoTexis-h5i ปีที่แล้ว

      Son como punteros

    • @thefran901
      @thefran901 2 วันที่ผ่านมา

      Porque la referencia se puede pasar como argumento a otro método (en los parámetros). De esa manera se pueden crear métodos muy genéricos que aceptar como parámetro un delegado, o un predicado, o una funcion, o una accion, y luego ir llamando a este método pasándole diferentes predicados como argumentos, dependiendo del contexto y caso en que quiera usarlo. Esto permite ahorrar código y no repetir lógica.
      Por ejemplo supongamos que tengo un método que se llama inicializarConexion(...), y lo que hace este método es, como su nombre indica, inicializar una conexión, tiene todo un código complicado adentro, y al pasa a llamar a que se ejecute otro método o función. El tema es, que dependiendo del contexto en que quiera inicializar esa conexión, voy a querer que el método inicializarConexion ejecute una función diferente o específica después de inicializar la conexión. Entonces lo que me conviene es declararle un parámetro que sea un delegado; este delegado puede ser cualquier función o método (con una determinada firma) que yo quiera, y cada vez que llame al método inicializarConexion, lo voy a hacer pasándole diferentes funciones como argumentos.

  • @estebanf1490
    @estebanf1490 3 ปีที่แล้ว +1

    Solución a los números primos que cree
    static bool DamePrimos(int num)
    {
    if (num < 2) return false;
    for (int i = 2; i < num - 1; i++) { if (num % i == 0) return false; }
    return true;
    }

  • @GerentedeSistemas
    @GerentedeSistemas 4 ปีที่แล้ว

    Ejercicio Delegado Primo
    Predicate PrimoPredicate = new Predicate(EsPrimo);
    List primo = lista.FindAll(PrimoPredicate);
    primo.ForEach (n =>
    {
    Console.WriteLine(n);
    });
    static bool EsPrimo(int n)
    {
    if (n == 1) return false;
    for (int i = 1; i 1 && i < n)
    {
    if (n % 2 == 0) {
    return false;
    }
    }
    }
    return true;
    }

  • @the_naacho097
    @the_naacho097 5 ปีที่แล้ว +2

    PíldorasInformaticas necesito un pelín de ayuda en clase de informática y mates (nos da el mismo profesor) nos pidió que hiciéramos un juego RogueLike con gráficos ASCII en Phyton. Pero yo estoy perdido. Podrías hacer una serie de tutoriales haciendo un juego así ? Porfavor 😢
    También nos dijo que nos descargarnos un paquete o algo así que era muy utilizado para hacer Roguelikes se llama Phyton tdl.

  • @ralvarezb78
    @ralvarezb78 5 ปีที่แล้ว

    Creo que tarde o temprano me voy a poner con C#

    • @alanmelendez7154
      @alanmelendez7154 4 ปีที่แล้ว

      Deverias comenzar esta ciendo muy demandando .NET ahora mismo espero y no tardes mucho !

  • @acaraballo
    @acaraballo 3 ปีที่แล้ว

    28/10/2020

  • @alphaalfre
    @alphaalfre 2 ปีที่แล้ว

    👀

  • @jomarcordero4515
    @jomarcordero4515 4 ปีที่แล้ว +1

    List gente = new List
    {
    new Persona{ Nombre = "Juan", Edad = 18},
    new Persona{ Nombre = "Maria", Edad = 28},
    new Persona{ Nombre = "Ana", Edad = 37}
    };

  • @RobertoTexis-h5i
    @RobertoTexis-h5i ปีที่แล้ว

    Con numero primo:
    if (num == 2 || num == 3)
    {
    return true;
    }
    else if (num % 2 == 0 || num % 3 == 0)
    {
    return false;
    }
    else
    {
    return true;
    }

  • @Rafaelink17
    @Rafaelink17 4 ปีที่แล้ว

    no, profe :( el uno no es primo u.u 10:10

    • @Rafaelink17
      @Rafaelink17 4 ปีที่แล้ว

      La definición de primo es ser divisible por dos números. El uno es divisible solo por uno.

  • @brayan2063
    @brayan2063 4 ปีที่แล้ว +2

    pedos y petres XD

  • @CesarMendoza-qs2qx
    @CesarMendoza-qs2qx 10 หลายเดือนก่อน

    que gonorrea de ejercicio ! Hice un ejercicio similar con PERSONAS antes de que tu lo hicieras, patine bastante pero viejo... EXCELENTE, en este punto hay que tener los conceptos claros de todo lo que hemos visto porque si no es asi... pailas... no avanza uno.... por ahora AMIGO ENTENDI TODO E HICE UN EJERCICIO SOLO ! Muchas gracias