‫Y en este video, veremos algunas interfaces muy importantes que debe comprender una vez que comience
‫a convertirse en un desarrollador más avanzado y nítido.
‫Y esa es la interfaz enumerable AI, así como la interfaz del enumerador AI.
‫De acuerdo, entonces debe comprender las interfaces antes de ver este video, porque de lo contrario, algunos de los
‫conceptos no tendrán sentido para usted potencialmente.
‫Así que realmente recomiendo ver el video de interfaz que tenemos para ofrecer también.
‫Bien, entonces la interfaz enumerable de AI es la mejor interfaz para muchos sincitiales de colección y su trabajo es proporcionar
‫una forma de iterar a través de una colección.
‫Es por eso que podemos usar para cada lubricante para pasar por una lista o un diccionario, porque
‫están heredando de la innumerable interfaz de la innumerable interfaz y el inglés simple.
‫Cuando una clase de colección implementa la interfaz inaugural, se vuelve responsable y podemos contar
‫cada elemento en ella individualmente.
‫Entonces, hay dos versiones diferentes de la interfaz enumerable de AI.
‫Una es que funciona para colecciones genéricas donde tienes estos corchetes de apertura enumerables de AI, corchetes de
‫cierre y luego la interfaz enumerable de AI para colecciones no genéricas.
‫Bien, entonces debería entender qué son las colecciones genéricas y no genéricas.
‫Tienen ciertas ventajas y desventajas, pero también tengo un video para eso.
‫Espero que lo hayas visto antes de ver este video porque de lo contrario es un poco complicado.
‫Bien, estos dos que tenemos aquí, veamos esos.
‫Dado que las colecciones genéricas se introdujeron después de las colecciones no genéricas, se recomienda utilizar
‫las colecciones genéricas.
‫Así que básicamente son una versión mejorada, por así decirlo.
‫Entonces, si está creando un nuevo proyecto, se recomienda usar la versión genérica porque y enumerable
‫para colecciones no genéricas, necesita aplicar o realizar boxeo y sobre boxeo, que básicamente es la
‫conversión de tipos de objetos.
‫Y luego explicaremos cómo usar la interfaz AI Enumerable T o la interfaz de colecciones genéricas.
‫De acuerdo, no vamos a repasar la interfaz de colecciones no genéricas porque no se recomienda
‫debido a hacer boxing y unboxing, que simplemente es menos eficiente.
‫Así que ahora veamos la diferencia entre el enumerable AI y el enumerador AI.
‫Quizás los hayas escuchado antes.
‫Por lo tanto, la interfaz enumerable de AI contiene un método único que debe implementar al implementar esta
‫interfaz.
‫Y lo haremos más adelante en nuestro ejemplo particular aquí.
‫Entonces tiene un poco más de sentido.
‫Entonces, el método Get enumerator es el que necesita implementar y devuelve un objeto enumerador AI.
‫Bien, entonces este método que necesita implementar cuando quiere usar un enumerable AI para su clase
‫o lo que desea implementar para su clase, necesita tener este método get enumerator, que luego devuelve
‫un enumerador AI.
‫Entonces, el enumerador de AI.
‫Proporciona la capacidad de reiterar a través de la colección al exponer una propiedad actual que apunta al
‫objeto en el que estamos actualmente en la colección.
‫Bien, esto es mucho más complicado de lo que será una vez que lo ejecutemos en nuestro ejemplo particular.
‫Bien, entonces vamos a construir un ejemplo, entendiendo completamente lo que significa todo esto.
‫Así que esto es solo para prepararte lo que puedes esperar.
‫Bien, comencemos.
‫Finalmente alejándose de toda esta teoría.
‫De hecho, echemos un vistazo a la práctica.
‫Así que creemos esta pequeña clase llamada Perro y la pondré en el mismo archivo para simplificar las
‫cosas.
‫Entonces tenemos esta clase llamada Perro con un nombre y tenemos este booleano llamado no es IDOC.
‫Así que básicamente comprobaremos si el perro es travieso o no.
‫Y en base a eso, le vamos a dar golosinas.
‫De acuerdo, si no es un perro travieso, recibirás menos golosinas que si es un buen niño o un buen perro.
‫Bien, entonces el constructor aquí básicamente solo establece esos dos valores.
‫Entonces, cuando creamos un objeto perro, le daremos un nombre y un booleano, ya sea perro o no, usted
‫no.
‫Y luego tenemos este método de obsequio y esto básicamente imprimirá ese perro que dijo guau.
‫Por lo tanto, por cada uno que reciba premios que le den al perro, dirá, está bien, así que básicamente si es un buen
‫perro, recibirás premios y lo harás dos veces.
‫Y si es un perro malo o un perro travieso, solo se moverá una vez porque recibirá menos golosinas.
‫Bien, ahora tenemos esta clase de perro y ahora podemos seguir adelante y crear objetos de perro, así que tengamos esta otra
‫clase.
‫Supongamos que tenemos otra clase que usará perros dentro de una lista.
‫Bien, tenemos esta clase de refugio para perros.
‫Entonces, esta clase de refugio para perros tendrá una lista de perros.
‫Por lo tanto, debemos asegurarnos de tener esto usando colecciones del sistema genéricas porque la lista
‫es una colección genérica.
‫Bien, aquí en la parte superior verá que ahora tiene esto usando colecciones del sistema genéricas.
‫Bien, ahora que tenemos este refugio para perros y tenemos esta lista de perros en el constructor de este refugio para
‫perros, lo único que vamos a hacer es inicializar la lista de este perro con un grupo de perros.
‫Entonces tenemos al perro Casper o al perro llamado Casper.
‫No es un perro travieso, pero Siff es un perro travieso o lo real no es travieso y Pixel tampoco es travieso.
‫Así que no me pregunten cómo se nos ocurren estos nombres, pero así es básicamente como vamos a llamar a esos
‫perros.
‫Por supuesto, podría hacer que toda esta aplicación sea mucho más compleja.
‫Pero nuestra idea es realmente usar esta lista de perros para recorrer el refugio de perros, para pasar por el refugio
‫de perros, básicamente, y basándonos en si un perro es bueno o no o un perro travieso o no, vamos
‫a dale una golosina o dos golosinas.
‫Así que ahora vayamos a nuestro método principal, porque ahí es donde está el punto de partida de nuestra aplicación.
‫Y en este punto, sigamos adelante y creemos un refugio para perros aquí.
‫Está bien.
‫Así que tenemos este refugio para perros llamado Shelter, y será un nuevo refugio para perros.
‫Así que lo inicializamos de inmediato también para que podamos usar este objeto de refugio porque el objeto
‫de refugio contendrá una lista de perros.
‫Derecha.
‫Así que ahora lo que queremos hacer es iterar a través de la lista y comprobar si queremos darles golosinas o
‫no.
‫Así que creemos un para cada año, así que toque dos veces para prepararlo para nosotros.
‫Entonces, ¿por qué vamos a pasar?
‫Bueno, estamos pasando por un perro.
‫Y lo vamos a llamar perro, por lo que cada elemento dentro de la lista será un perro y luego
‫la colección por la que queremos pasar será, de hecho, el refugio.
‫Bien, ahora tenemos un pequeño problema, una vez que pasamos el cursor sobre él, decimos que vemos que el nombre de la
‫colección o matriz para iterar es el refugio.
‫Pero la instrucción for each no puede operar en variables del tipo refugio para perros
‫porque refugio para perros no contiene una instancia pública o una definición de extensión para obtener enumerador.
‫Bien, ahí tenemos este enumerador get.
‫¿Entonces que significa eso?
‫Bueno, esto significa que necesitamos implementar la interfaz que enumero aquí para nuestro refugio para perros porque este refugio para perros tiene
‫una lista que queremos recorrer.
‫Derecha.
‫Porque si lo miras, refugio, bueno, nuestro refugio para perros, ese es el refugio por el que queremos iterar.
‫Y para que sea iterable, necesitamos implementar el enumerable aquí.
‫¿Y qué tipo de objetos queremos enumerar?
‫Bueno, en nuestro caso, serán los perros.
‫Así que queremos poder revisar los perros dentro del refugio para perros porque, bueno, tenemos esta lista
‫de perros y está inicializada aquí en el constructor del refugio para perros.
‫Y queremos asegurarnos de poder revisarlos todos y hacer algo con los perros, como
‫acariciarlos o, en nuestro caso, darles una golosina.
‫Entonces, una vez que implementas esto y subes aquí, el error desaparece.
‫Entonces, de repente, está bien porque, bueno, nuestro refugio, que es un refugio para perros, ahora sigue las
‫instrucciones que nos acaban de dar y que necesita implementar un año enumerable.
‫Entonces este es el enumerable genérico porque tenemos este perro aquí mismo, correcto, porque no es
‫este, es el que tiene el tipo que le estamos dando.
‫Pero ahora, una vez que tenemos nuestro robot, vemos que obtenemos otro error.
‫Dice que el refugio para perros no implementa el miembro de la interfaz I enumerable dog get enumerator y el
‫innumerable get enumerator para que podamos ponerlos manualmente allí.
‫Pero la belleza de usar un yo. D. es que la identificación puede hacer mucho
‫trabajo para nosotros, por lo que puede hacer clic en mostrar posibles correcciones y luego hacer clic en implementar todos los miembros explícitamente y luego agregará
‫el espacio de nombres de colecciones para nosotros y se encargará de agregar esos dos métodos para nosotros o esos dos miembros.
‫Entonces, una vez que hagamos clic en esto, verá que este error desaparecerá.
‫Y si nos desplazamos más hacia abajo, encontrará que ahora estamos devolviendo un enumerador I de time
‫dog y una colección de enumeradores I no genérica.
‫Entonces ahora no lo hemos implementado.
‫Es por eso que hemos lanzado esta excepción no implementada aquí.
‫Entonces tenemos que cambiar eso aquí.
‫Ahora podemos implementar lo que debería suceder con el método de enumerador arget una vez que se llama, así que
‫para solucionarlo, lo que vamos a decir aquí es simplemente regresar.
‫Perros, nuestros perros no reciben un enumerador como tal.
‫Y esa será la implementación porque nuestro refugio para perros ahora está implementando la interfaz enumerable y nuestra lista
‫aquí es, de hecho, oye, si pasas el mouse sobre ella, una lista es una lista genérica.
‫Bien, y ahora podemos tomar estos perritos y podemos obtener el enumerador para cada iteración que atravesará nuestro
‫para cada dos.
‫Básicamente, volverá a los perros individuales.
‫Y ahora lo que podemos hacer es usar el perro en orden para cada bucleador.
‫Básicamente, eso significa que ahora podemos seguir adelante y verificar si el perro no es Nodi, entonces no es un perro, ese
‫es Mordy.
‫Si ese es el caso, básicamente significa que si el perro no es travieso, llamaremos al
‫método dar golosina y le daremos dos golosinas.
‫Y de lo contrario, si fue travieso porque no podemos dejar de dar golosinas, simplemente amamos demasiado las
‫charlas, solo les daremos una golosina, está bien, así.
‫Y en este punto, no podemos ejecutar nuestra aplicación.
‫Y veremos, dijo Casper, Wolf, dos veces porque es un buen perro, sniff es un perro travieso, por lo
‫que solo recibe una golosina y dice, Wolf, una vez que Oreo lo hace dos veces y Pixel dice que se movió dos veces también.
‫Está bien.
‫Y así es básicamente cómo puede hacer que su clase siga las instrucciones o implemente y enumere para
‫que pueda recorrer una lista usando el para cada bucle, por ejemplo, como lo tenemos aquí.
‫está bien.
‫Ahora, podría preguntarse, ¿por qué no estamos implementando para obtener un enumerador con el ojo enumerable, el
‫que no es genérico?
‫Bueno, eso es porque no usamos un ejemplo no genérico.
‫Y nuestro refugio para perros tampoco es más genérico, pero es solo que debes implementarlo cuando uses la interfaz eye
‫enumerable, porque de lo contrario, si te deshaces de él, recibiremos una advertencia aquí nuevamente.
‫Verá que aquí había en realidad una flecha, por lo que debemos asegurarnos de tener este método allí también.
‫Muy bien, eso es todo para este video y el siguiente video, vamos a ver otro ejemplo
‫en el que vamos a aprovechar el ojo, innumerables aún más.
‫Bien, esto fue solo una pequeña introducción.
‫Sé que este tema es bastante complejo y complicado, pero los vamos a aprovechar un poco más.
‫Y ahora, por cierto, solo uno rápido, solo un resumen aquí.
‫¿Cuándo se recomienda utilizar la interfaz enumerable de ojos?
‫Bueno, debería usarlo cuando su colección represente una tabla de base de datos masiva.
‫Entonces, no desea copiar todo en la memoria y causar problemas de rendimiento en su aplicación porque la base de
‫datos podría ser enorme, ¿verdad?
‫Podría tener millones y millones de entradas.
‫Y no desea tener que cargar todo para iterar a través de él, pero
‫solo desea cargar todo lo que necesite para el proceso actual, lo que sea que desee ejecutar.
‫Y luego, ¿cuándo no debería utilizar la interfaz enumerable de ojos?
‫Bueno, cuando necesite los resultados de inmediato y posiblemente esté mutando, admitiendo los objetos más adelante, en este
‫caso, es mejor usar una matriz o una lista.
‫Entonces, cuando desee poder mutar o agregar objetos más adelante y no necesita los
‫resultados de inmediato, use una matriz o lista o use y I enumerable porque será más eficiente.
‫Muy bien, eso es todo para este video.
‫Nos vemos en el próximo.