‫E in questo video, esamineremo alcune interfacce molto importanti che dovresti comprendere una volta che
‫inizi a diventare uno sviluppatore più avanzato e acuto.
‫E questa è l'interfaccia enumerabile AI e l'interfaccia enumeratore AI.
‫OK, quindi dovresti capire le interfacce prima di guardare questo video, perché altrimenti alcuni concetti
‫potrebbero non avere senso per te.
‫Quindi consiglio vivamente di dare un'occhiata anche al video dell'interfaccia che abbiamo da offrire.
‫OK, quindi l'interfaccia enumerabile AI è la migliore interfaccia per molte raccolte sinciziali e il suo compito
‫è fornire un modo per scorrere una raccolta.
‫Quindi questo è il motivo per cui possiamo usare per ogni lubes passare attraverso un elenco
‫o un dizionario, perché stanno ereditando dall'innumerevole interfaccia dell'innumerevole interfaccia e dall'inglese semplice.
‫Quando una classe di raccolta implementa l'interfaccia inaugurale, diventa responsabile e possiamo contare
‫ogni elemento in essa individualmente.
‫Quindi ci sono due diverse versioni dell'interfaccia enumerabile AI.
‫Uno è che funziona per le raccolte generiche in cui hai questa parentesi di apertura enumerabile AI, parentesi
‫di chiusura e quindi l'interfaccia enumerabile AI per le raccolte non generiche.
‫OK, quindi dovresti capire cosa sono anche le raccolte generiche e non generiche.
‫Hanno alcuni vantaggi e svantaggi, ma ho anche un video per questo.
‫Spero che tu l'abbia visto prima di guardare questo video perché altrimenti è un po' complicato.
‫OK, quindi questi due che abbiamo qui, diamo un'occhiata a quelli.
‫Poiché le raccolte generiche sono state introdotte dopo le raccolte non generiche, si consiglia di utilizzare
‫le raccolte generiche.
‫Quindi sono fondamentalmente una versione migliorata, per così dire.
‫Quindi, se stai creando un nuovo progetto, è consigliabile utilizzare la versione generica perché ed enumerabile per
‫collezioni non generiche, ha bisogno di applicare o eseguire il boxing e sul boxing, che sostanzialmente è
‫la conversione di tipi di oggetti.
‫E in seguito spiegheremo come utilizzare l'interfaccia AI Enumerable T o l'interfaccia delle raccolte generiche.
‫OK, non esamineremo l'interfaccia delle raccolte non generiche perché non è consigliata a causa
‫del boxing e dell'unboxing, che è solo meno efficiente.
‫Quindi ora diamo un'occhiata alla differenza tra l'enumerabile AI e l'enumeratore AI.
‫Forse li hai già sentiti.
‫Quindi l'interfaccia enumerabile AI contiene un singolo metodo che è necessario implementare durante l'implementazione di questa
‫interfaccia.
‫E lo faremo più avanti nel nostro esempio particolare qui.
‫Quindi ha un po' più senso.
‫Quindi il metodo Get enumerator è quello che devi implementare e restituisce un oggetto enumerator AI.
‫OK, quindi questo metodo che devi implementare quando vuoi usare un enumerabile AI per la tua classe
‫o cosa vuoi implementarlo per la tua classe, devi avere questo metodo get enumerator, che quindi restituisce
‫un enumeratore AI.
‫Quindi l'enumeratore AI.
‫Fornisce la possibilità di ripetere la raccolta esponendo una proprietà corrente che punta all'oggetto
‫in cui ci troviamo attualmente nella raccolta.
‫OK, questo è molto più complicato di quanto lo sarà una volta eseguito nel nostro esempio particolare.
‫OK, quindi costruiremo un esempio, comprendendo appieno cosa significa tutto questo.
‫Quindi questo è solo per prepararti a ciò che puoi aspettarti.
‫OK, allora cominciamo.
‫Finalmente allontanarsi da tutta questa teoria.
‫Diamo un'occhiata alla pratica.
‫Quindi creiamo questa piccola classe chiamata Dog e la metterò nello stesso file per mantenere le cose
‫semplici.
‫Quindi abbiamo questa classe chiamata Dog con un nome e abbiamo questo booleano chiamato non è IDOC.
‫Quindi controlleremo fondamentalmente se il cane è cattivo o meno.
‫E in base a questo, gli daremo dei dolcetti.
‫OK, quindi se non è un cane cattivo, riceverai meno premi che se è un bravo ragazzo o un bravo cane.
‫OK, quindi il costruttore qui sostanzialmente imposta solo quei due valori.
‫Quindi, quando creiamo un oggetto cane, gli daremo un nome e un booleano, che sia il cane o meno, tu non lo
‫sei.
‫E poi abbiamo questo metodo regalo e questo praticamente stamperà solo quel cane detto woof.
‫Quindi, per ogni singolo che tratta il cane, dirà, OK, quindi in pratica se è un buon cane, riceverai dei
‫premi e lo farai due volte.
‫E se è un cane cattivo o cattivo, allora si muoverà solo una volta perché riceverà meno dolcetti.
‫OK, quindi ora abbiamo questa classe cane e ora possiamo andare avanti e creare oggetti cane, quindi abbiamo quest'altra
‫classe.
‫Supponiamo di avere un'altra classe che utilizzerà i cani all'interno di una lista.
‫OK, quindi abbiamo questo corso di canile.
‫Quindi questa classe di canile avrà un elenco di cani.
‫Pertanto, dobbiamo assicurarci di utilizzare le raccolte di sistema generiche perché list è
‫una raccolta generica.
‫OK, quindi qui in alto vedrai che ora hai questo usando le raccolte di sistema generiche.
‫OK, quindi ora che abbiamo questo rifugio per cani e abbiamo questo elenco di cani nel costruttore di questo
‫rifugio per cani, l'unica cosa che faremo è inizializzare l'elenco di questo cane con un gruppo di cani.
‫Quindi abbiamo il cane Casper o il cane chiamato Casper.
‫Non è un cane cattivo, ma Siff è un cane cattivo o reale non è cattivo e anche Pixel non è cattivo.
‫Quindi non chiedetemi come ci vengono in mente questi nomi, ma è fondamentalmente così che chiameremo quei
‫cani.
‫Potresti, ovviamente, rendere l'intera applicazione molto più complessa.
‫Ma la nostra idea è in realtà di usare questo elenco di cani per scorrere il rifugio per cani, per passare attraverso il rifugio
‫per cani, in pratica, e in base al fatto che un cane sia buono o no o un cane cattivo o
‫no, andremo a dagli uno o due dolcetti.
‫Quindi ora passiamo al nostro metodo principale, perché è lì che si trova il nostro punto di partenza della nostra applicazione.
‫E a questo punto, andiamo avanti e creiamo un rifugio per cani qui.
‫Va bene.
‫Quindi abbiamo questo rifugio per cani chiamato Shelter, e sarà un nuovo rifugio per cani.
‫Quindi lo inizializziamo subito anche in modo da poter usare questo oggetto rifugio perché l'oggetto rifugio
‫conterrà un elenco di cani.
‫Destra.
‫Quindi ora quello che vogliamo fare è scorrere l'elenco e controllare se vogliamo dare loro dei premi o
‫meno.
‫Quindi creiamo un doppio tap per ogni anno in modo da prepararlo per noi.
‫Allora, cos'è che stiamo per attraversare?
‫Bene, stiamo attraversando un cane.
‫E lo chiameremo cane, quindi ogni singolo elemento all'interno della lista sarà un cane e quindi
‫la collezione che vogliamo esaminare sarà, in effetti, il rifugio.
‫OK, quindi ora abbiamo un piccolo problema, una volta che ci passiamo sopra, diciamo che vediamo il nome della raccolta o
‫dell'array su cui scorrere è il rifugio.
‫Ma l'istruzione for each non può operare su variabili del tipo dog shelter
‫perché dog shelter non contiene un'istanza pubblica o una definizione di estensione per l'enumeratore get.
‫OK, quindi abbiamo questo enumeratore di get.
‫Che cosa vuol dire?
‫Bene, questo significa che dobbiamo implementare l'interfaccia che ho elencato qui per il nostro rifugio per cani perché questo rifugio per cani
‫ha un elenco che vogliamo scorrere.
‫Destra.
‫Perché se lo guardi, rifugio, beh, il nostro rifugio per cani, è il rifugio che vogliamo scorrere.
‫E per renderlo iterabile, dobbiamo implementare l'enumerabile qui.
‫E che tipo di oggetti vogliamo enumerare?
‫Bene, nel nostro caso, saranno i cani.
‫Quindi vogliamo essere in grado di esaminare i cani all'interno del rifugio per cani perché, beh, abbiamo questo
‫elenco di cani ed è inizializzato qui nel costruttore del rifugio per cani.
‫E vogliamo assicurarci di poterli esaminare tutti e fare qualcosa con i cani, come
‫accarezzarli o, nel nostro caso, dargli un bocconcino.
‫Quindi, una volta implementato questo e sali qui, l'errore scompare.
‫Quindi all'improvviso va bene perché, beh, il nostro rifugio, che è un rifugio per cani, ora segue le istruzioni
‫che ci sono state appena date e che ha bisogno di implementare anno enumerato.
‫Quindi questo è l'enumerabile generico perché abbiamo questo cane proprio qui, giusto, perché non
‫è questo, è quello con il tipo che gli stiamo dando.
‫Ma ora, una volta che abbiamo il nostro robot, vediamo che riceviamo un altro errore.
‫Dice che il rifugio per cani non implementa il membro dell'interfaccia I enumerabile dog get enumerator e l'innumerevoli enumeratore
‫get in modo che possiamo inserirli manualmente lì.
‫Ma il bello di usare una I. D. è che l'ID può fare molto lavoro
‫per noi, quindi puoi fare clic su mostra potenziali correzioni e quindi fare clic su implementa tutti i membri in modo esplicito e quindi aggiungerà
‫lo spazio dei nomi delle collezioni per noi e si occuperà di aggiungere questi due metodi per noi o quei due membri.
‫Quindi, una volta fatto clic su questo, vedrai che questo errore scomparirà.
‫E se scorriamo più in basso, scoprirai che ora stiamo restituendo un I enumerator of time dog
‫e una raccolta di I enumerator non generici.
‫Quindi ora non l'abbiamo implementato.
‫Ecco perché abbiamo questa eccezione che non hai implementato qui.
‫Quindi dobbiamo cambiarlo qui.
‫Ora possiamo implementare ciò che dovrebbe accadere con il metodo enumeratore arget una volta chiamato, quindi per
‫risolverlo, quello che diremo qui è solo il ritorno.
‫Cani, i nostri cani non ottengono l'enumeratore proprio così.
‫E questa sarà l'implementazione perché il nostro rifugio per cani ora sta implementando l'interfaccia enumerabile e la nostra
‫lista qui è infatti, ehi, se ci passi sopra, un elenco è un elenco generico.
‫OK, e ora possiamo prendere questi cagnolini e ottenere l'enumeratore per ogni singola iterazione che il nostro per
‫ogni due passerà.
‫Quindi, in pratica, tornerà ai singoli cani.
‫E ora quello che possiamo fare è usare effettivamente il cane in ordine per ogni loopier.
‫Quindi questo in pratica significa che ora possiamo andare avanti e controllare se il cane non è Nodi, quindi non è un cane, quello
‫è Mordy.
‫Se questo è il caso, ciò significa sostanzialmente che se il cane non è cattivo, chiameremo
‫il metodo "premio" e gli daremo due premi.
‫E altrimenti, se era cattivo perché non possiamo non dare dolcetti, amiamo troppo i discorsi,
‫daremo loro solo un regalo, OK, così.
‫E a questo punto, non possiamo eseguire la nostra applicazione.
‫E vedremo, ha detto Casper, Wolf, due volte perché è un bravo cane, sniff è un cane cattivo, quindi
‫riceve solo una sorpresa e dice, Wolf, una volta che Oreo lo fa due volte e Pixel dice che si è mosso anche due volte.
‫Va bene.
‫E questo è fondamentalmente il modo in cui puoi fare in modo che la tua classe segua le istruzioni o implementi e enumerabile
‫in modo che tu possa scorrere un elenco usando il ciclo for each, ad esempio, come lo abbiamo qui.
‫OK.
‫Ora, potresti chiederti, perché non stiamo implementando per ottenere un enumeratore con l'occhio enumerabile, quello
‫che non è generico?
‫Bene, questo perché non usiamo un esempio non generico.
‫E il nostro rifugio per cani non è nemmeno più generico, ma è solo che è necessario implementarlo quando si
‫utilizza l'interfaccia enumerabile dell'occhio, perché altrimenti, se lo si elimina, riceveremo di nuovo un avviso
‫qui.
‫Vedete, qui c'era in realtà una freccia, quindi dobbiamo assicurarci di avere anche questo metodo.
‫Va bene, questo è tutto per questo video e per il prossimo video, esamineremo un
‫altro esempio in cui sfrutteremo l'occhio, innumerevoli ancora di più.
‫OK, questa era solo una piccola introduzione.
‫So che questo argomento è piuttosto complesso e complicato, ma ne approfitteremo un po' di più.
‫E ora, a proposito, solo uno veloce, solo un riassunto qui.
‫Quando si consiglia di utilizzare l'interfaccia enumerabile dell'occhio?
‫Bene, dovresti usarlo quando la tua collezione rappresenta un'enorme tabella di database.
‫Quindi non vuoi copiare l'intera cosa in memoria e causare problemi di prestazioni nella tua applicazione perché il database
‫potrebbe essere enorme, giusto?
‫Potrebbe avere milioni e milioni di voci.
‫E non vuoi dover caricare l'intera cosa per scorrere attraverso di essa, ma
‫vuoi solo caricare quanto ti serve per il processo corrente, qualunque cosa tu voglia eseguire.
‫E poi quando non dovresti usare l'interfaccia enumerabile dell'occhio?
‫Bene, quando hai bisogno dei risultati subito e probabilmente stai mutando, ammettendo gli oggetti in seguito, in questo
‫caso, è meglio usare un array o un elenco.
‫Quindi, quando vuoi essere in grado di mutare o aggiungere oggetti in seguito e non hai
‫bisogno dei risultati immediatamente, usa un array o un elenco o altrimenti usa e enumerabile perché sarà più efficiente.
‫Va bene, per questo video è tutto.
‫Ci vediamo al prossimo.