‫Et cette vidéo, nous allons examiner quelques interfaces très importantes que vous devriez comprendre une fois que
‫vous commencez à devenir un développeur plus avancé et plus pointu.
‫Et c'est l'interface énumérable AI ainsi que l'interface énumérateur AI.
‫D'accord, vous devez donc comprendre les interfaces avant de regarder cette vidéo, car sinon certains concepts
‫n'auront potentiellement aucun sens pour vous.
‫Je recommande donc vraiment de consulter la vidéo d'interface que nous avons également à offrir.
‫OK, donc l'interface énumérable AI est la meilleure interface pour de nombreuses collections syncytiales et son travail consiste
‫à fournir un moyen d'itérer dans une collection.
‫C'est donc pour cela qu'on peut utiliser pour chaque lubrifiants parcourir une liste ou un dictionnaire,
‫car ils héritent de l'innombrable interface de l'innombrable interface et de l'anglais simple.
‫Lorsqu'une classe de collection implémente l'interface inaugurale, elle devient responsable et nous pouvons
‫compter chaque élément individuellement.
‫Il existe donc deux versions différentes de l'interface énumérable AI.
‫La première est que cela fonctionne pour les collections génériques où vous avez ces crochets ouvrants énumérables AI,
‫le crochet fermant, puis l'interface énumérable AI pour les collections non génériques.
‫OK, vous devez donc comprendre ce que sont les collections génériques et non génériques.
‫Ils ont certains avantages et inconvénients, mais j'ai aussi une vidéo pour cela.
‫J'espère que vous l'avez regardé avant de regarder cette vidéo car sinon c'est un peu compliqué.
‫OK, donc ces deux que nous avons ici, regardons-les.
‫Puisque les collections génériques ont été introduites après les collections non génériques, il est recommandé d'utiliser
‫les collections génériques.
‫Donc, ils sont fondamentalement une version améliorée, pour ainsi dire.
‫Donc, si vous créez un nouveau projet, il est recommandé d'utiliser la version générique car et moi
‫énumérable pour les collections non génériques, il faut appliquer ou effectuer le boxing et le boxing, qui est
‫essentiellement la conversion de types d'objets.
‫Et nous expliquerons plus tard comment utiliser l'interface AI Enumerable T ou l'interface de collections génériques.
‫OK, nous n'allons pas passer en revue l'interface des collections non génériques car elle n'est pas recommandée en raison
‫de la boxe et du déballage, ce qui est juste moins efficace.
‫Voyons maintenant la différence entre l'énumérable AI et l'énumérateur AI.
‫Vous les avez peut-être déjà entendus.
‫Ainsi, l'interface énumérable AI contient une méthode unique que vous devez implémenter lors de l'implémentation de cette
‫interface.
‫Et nous allons le faire plus tard dans notre exemple particulier ici.
‫C'est donc un peu plus logique.
‫Ainsi, la méthode d'énumérateur Get est celle que vous devez implémenter et elle renvoie un objet énumérateur AI.
‫OK, donc cette méthode que vous devez implémenter lorsque vous souhaitez utiliser un énumérable AI pour votre classe
‫ou ce que vous voulez l'implémenter pour votre classe, vous devez avoir cette méthode get enumerator, qui renvoie
‫ensuite un énumérateur AI.
‫Donc l'énumérateur AI.
‫Fournit la possibilité de réitérer à travers la collection en exposant une propriété actuelle qui pointe vers l'objet
‫auquel nous nous trouvons actuellement dans la collection.
‫OK, c'est beaucoup plus compliqué qu'il ne le sera une fois que nous l'aurons réellement exécuté dans notre exemple particulier.
‫OK, nous allons donc construire un exemple, en comprenant parfaitement ce que tout cela signifie.
‫Donc, c'est juste pour vous préparer ce à quoi vous pouvez vous attendre.
‫OK, alors commençons.
‫Enfin s'éloigner de toute cette théorie.
‫Regardons en fait dans la pratique.
‫Créons donc cette petite classe appelée Chien et je vais la mettre dans le même fichier pour garder les choses
‫simples.
‫Nous avons donc cette classe appelée Dog avec un nom et nous avons ce booléen appelé n'est pas IDOC.
‫Nous allons donc essentiellement vérifier si le chien est méchant ou non.
‫Et sur cette base, nous allons lui donner des friandises.
‫OK, donc s'il n'est pas un chien méchant, vous aurez moins de friandises que s'il est un bon garçon ou un bon chien.
‫OK, donc le constructeur ici définit simplement ces deux valeurs.
‫Ainsi, lorsque nous créons un objet chien, nous allons lui donner un nom et un booléen, que ce soit le chien ou non, vous ne
‫l'êtes pas.
‫Et puis nous avons cette méthode de gâterie-cadeau et cela imprimera simplement ce chien dit ouaf.
‫Donc, pour chaque personne qui traite le chien, il dira, d'accord, donc fondamentalement, si c'est un bon chien, vous aurez des
‫friandises et vous en aurez deux fois.
‫Et s'il s'agit d'un mauvais chien ou d'un chien méchant, il ne bougera qu'une seule fois car il recevra moins de friandises.
‫OK, alors maintenant nous avons cette classe chien et nous pouvons maintenant créer des objets chien, alors avons cette autre
‫classe.
‫Supposons que nous ayons une autre classe qui utilisera des chiens à l'intérieur d'une liste.
‫OK, nous avons donc ce cours de refuge pour chiens.
‫Donc, cette classe de refuge pour chiens aura une liste de chiens.
‫Par conséquent, nous devons nous assurer que nous avons cela en utilisant des collections système génériques car list
‫est une collection générique.
‫OK, donc ici en haut, vous verrez que maintenant vous l'avez en utilisant les collections système génériques.
‫OK, alors maintenant que nous avons ce refuge pour chiens et que nous avons cette liste de chiens dans le constructeur de ce refuge
‫pour chiens, la seule chose que nous allons faire est d'initialiser la liste de ce chien avec un groupe de chiens.
‫Nous avons donc le chien Casper ou le chien appelé Casper.
‫Ce n'est pas un chien méchant, mais Siff est un chien méchant ou le vrai n'est pas méchant et Pixel n'est pas méchant non plus.
‫Alors ne me demandez pas comment nous trouvons ces noms, mais c'est essentiellement ainsi que nous allons appeler ces
‫chiens.
‫Vous pourriez, bien sûr, rendre toute cette application beaucoup plus complexe.
‫Mais notre idée est vraiment juste d'utiliser cette liste de chiens pour parcourir le refuge pour chiens, pour parcourir le refuge
‫pour chiens, en gros, et selon qu'un chien est bon ou pas ou un chien méchant ou non, nous
‫allons donnez-lui une ou deux friandises.
‫Passons maintenant à notre méthode principale, car c'est là que se trouve notre point de départ de notre application.
‫Et à ce stade, allons de l'avant et créons un refuge pour chiens ici.
‫D'accord.
‫Nous avons donc ce refuge pour chiens appelé Shelter, et ce sera un nouveau refuge pour chiens.
‫Nous l'initialisons donc tout de suite également pour pouvoir utiliser cet objet abri car l'objet abri
‫contiendra une liste de chiens.
‫Droit.
‫Alors maintenant, ce que nous voulons faire, c'est parcourir la liste et vérifier si nous voulons leur donner des friandises ou
‫non.
‫Créons donc un pour chaque année comme si double tap afin de le préparer pour nous.
‫Alors, par quoi allons-nous passer ?
‫Eh bien, nous traversons un chien.
‫Et nous allons l'appeler chien, donc chaque élément de la liste sera un chien et la
‫collection que nous voulons parcourir sera, en fait, le refuge.
‫OK, alors maintenant nous avons un petit problème, une fois que nous la survolons, nous disons que nous voyons le nom de
‫votre collection ou tableau à parcourir est l'abri.
‫Mais l'instruction for each ne peut pas opérer sur des variables de type refuge pour
‫chiens car refuge pour chiens ne contient pas d'instance publique ou de définition d'extension pour get enumerator.
‫OK, nous avons donc cet énumérateur get.
‫Alors qu'est-ce que cela signifie?
‫Eh bien, cela signifie que nous devons implémenter l'interface que je énumère ici pour notre refuge pour chiens, car ce refuge pour chiens a
‫une liste que nous voulons parcourir.
‫Droit.
‫Parce que si vous le regardez, un refuge, eh bien, notre refuge pour chiens, c'est le refuge que nous voulons parcourir.
‫Et pour le rendre itérable, nous devons implémenter l'énumérable ici.
‫Et quel type d'objets voulons-nous énumérer ?
‫Eh bien, dans notre cas, ce seront les chiens.
‫Nous voulons donc pouvoir parcourir les chiens à l'intérieur du refuge pour chiens car, eh bien, nous avons cette
‫liste de chiens et elle est initialisée ici dans le constructeur du refuge pour chiens.
‫Et nous voulons nous assurer que nous pouvons simplement les parcourir tous et faire quelque chose avec les chiens,
‫comme les caresser ou, dans notre cas, leur donner une friandise.
‫Donc, une fois que vous avez implémenté cela et que vous montez ici, l'erreur disparaît.
‫Alors du coup ça va parce que, eh bien, notre refuge, qui est un refuge pour chiens, suit maintenant les
‫instructions qui viennent de nous être données qu'il doit mettre en œuvre des années énumérables.
‫Donc c'est le générique énumérable parce qu'on a ce chien juste ici, d'accord, parce que ce
‫n'est pas celui-ci, c'est celui avec le type qu'on lui donne.
‫Mais maintenant, une fois que nous avons notre robot, nous voyons que nous obtenons une autre erreur.
‫Il dit que le refuge pour chiens n'implémente pas le membre de l'interface I énumérable dog get enumerator et l'innombrable get
‫enumerator afin que nous puissions les mettre manuellement là-dedans.
‫Mais la beauté d'utiliser un I. RÉ. est que l'ID peut faire beaucoup de
‫travail pour nous, vous pouvez donc cliquer sur afficher les correctifs potentiels, puis cliquer sur implémenter tous les membres explicitement et il ajoutera ensuite l'espace
‫de noms des collections pour nous et il se chargera d'ajouter ces deux méthodes pour nous ou ces deux membres.
‫Donc, une fois que nous cliquons dessus, vous voyez que cette erreur disparaîtra.
‫Et si nous faisons défiler plus bas, vous constaterez que nous retournons maintenant un énumérateur I de chien
‫de temps et une collection d'énumérateurs I non générique.
‫Donc maintenant, nous ne l'avons pas mis en œuvre.
‫C'est pourquoi nous avons cette exception non implémentée ici.
‫Nous devons donc changer cela ici.
‫Nous pouvons maintenant implémenter ce qui devrait se passer avec la méthode d'énumération arget une fois qu'elle est appelée afin de
‫le corriger, ce que nous allons dire ici est simplement de retour.
‫Chiens, nos chiens ne reçoivent pas de dénombrement comme ça.
‫Et ce sera l'implémentation car notre refuge pour chiens implémente maintenant l'interface énumérable et notre liste
‫ici est en fait, hé, si vous la survolez, une liste est une liste générique.
‫OK, et maintenant nous pouvons prendre ces petits chiens et nous pouvons obtenir l'énumérateur pour chaque itération par laquelle notre pour
‫chacun des deux passera.
‫Donc, fondamentalement, cela reviendra aux chiens individuels.
‫Et maintenant, ce que nous pouvons faire, c'est utiliser le chien dans l'ordre pour chaque boucleur.
‫Donc, cela signifie essentiellement que nous pouvons maintenant vérifier si le chien n'est pas Nodi, donc pas un chien,
‫c'est Mordy.
‫Si c'est le cas, cela signifie essentiellement que si le chien n'est pas méchant, nous allons appeler la méthode donner
‫une friandise et nous allons lui donner deux friandises.
‫Et sinon, s'il était méchant parce qu'on ne peut pas ne pas donner de friandises, on aime juste trop les
‫discussions, on va juste leur donner une friandise, d'accord, comme ça.
‫Et à ce stade, nous ne pouvons pas exécuter notre application.
‫Et nous verrons, a dit Casper, Wolf, deux fois parce que c'est un bon chien, sniff est un chien
‫méchant, donc il ne reçoit qu'une seule friandise et il dit, Wolf, une fois Oreo le fait deux fois et Pixel dit déplacé deux fois aussi.
‫D'accord.
‫Et c'est essentiellement ainsi que vous pouvez faire en sorte que votre classe suive les instructions ou implémente et I énumérable afin
‫que vous puissiez parcourir une liste en utilisant la boucle pour chaque, par exemple, comme nous l'avons ici.
‫D'ACCORD.
‫Maintenant, vous vous demandez peut-être pourquoi n'implémentons-nous pas pour obtenir l'énumérateur avec l'œil énumérable, celui qui
‫n'est pas générique ?
‫Eh bien, c'est parce que nous n'utilisons pas d'exemple non générique.
‫Et notre refuge pour chiens n'est pas plus générique non plus, mais c'est juste que vous devez l'implémenter lorsque vous utilisez l'interface
‫énumérable des yeux, car sinon, si vous vous en débarrassez, nous recevrons à nouveau un avertissement
‫ici.
‫Vous voyez ici, il y avait en fait une flèche, nous devons donc nous assurer que nous avons également cette méthode là-dedans.
‫D'accord, donc c'est tout pour cette vidéo et la vidéo suivante, nous allons regarder un autre
‫exemple où nous allons profiter de l'œil, innombrables encore plus.
‫OK, donc c'était juste une petite introduction.
‫Je sais que ce sujet est assez complexe et compliqué, mais nous allons en profiter un peu plus.
‫Et maintenant, au fait, juste une brève, juste un résumé ici.
‫Quand est-il recommandé d'utiliser l'interface énumérable des yeux ?
‫Eh bien, vous devriez l'utiliser lorsque votre collection représente une table de base de données massive.
‫Vous ne voulez donc pas copier le tout en mémoire et causer des problèmes de performances dans votre application car la base de données
‫pourrait être énorme, n'est-ce pas ?
‫Il pourrait avoir des millions et des millions d'entrées.
‫Et vous ne voulez pas avoir à charger le tout pour le parcourir, mais vous voulez
‫juste charger autant que vous en avez besoin pour le processus en cours, tout ce que vous voulez exécuter.
‫Et puis quand ne faut-il pas utiliser l'interface énumérable des yeux ?
‫Eh bien, lorsque vous avez besoin des résultats tout de suite et que vous êtes éventuellement en train de muter, en admettant les objets plus
‫tard, dans ce cas, il est préférable d'utiliser un tableau ou une liste.
‫Ainsi, lorsque vous souhaitez pouvoir muter ou ajouter des objets ultérieurement et que vous n'avez pas besoin des
‫résultats tout de suite, utilisez un tableau ou une liste ou utilisez autrement et I énumérable car cela sera plus efficace.
‫Bon, c'est tout pour cette vidéo.
‫Rendez-vous dans le prochain.