‫Ve bu videoda, daha gelişmiş bir mağaza geliştiricisi olmak istediğinizde anlamanız
‫gereken bazı çok önemli arayüzlere bakacağız.
‫Bu da AI enumerator arayüzünün yanı sıra AI enumerable arayüzüdür.
‫Bu nedenle, bu videoyu izlemeden önce arayüzleri anlamalısınız, aksi takdirde bazı kavramlar sizin için potansiyel
‫olarak bir anlam ifade etmeyecektir.
‫Bu nedenle, sunduğumuz arayüz videosuna da göz atmanızı gerçekten tavsiye ederim.
‫Tamam.
‫Yani AI enumerable arayüzü, C sharp'taki birçok koleksiyon için temel arayüzdür ve görevi bir koleksiyonda
‫yineleme yapmak için bir yol sağlamaktır.
‫İşte bu yüzden bir liste ya da sözlüğün içinden geçmek için for each döngüsünü kullanabiliriz çünkü bunlar enumerable
‫arayüzünden miras alırlar.
‫Yani enumerable arayüzü basit bir dille, koleksiyon sınıfı AI enumerable arayüzünü
‫uyguladığında, sayılabilir hale gelir ve içindeki her bir öğeyi ayrı ayrı sayabiliriz.
‫Yani AI enumerable arayüzünün iki farklı versiyonu vardır.
‫Bunlardan biri, AI numaralandırılabilir açılış parantezine, kapanış parantezine ve ardından genel olmayan koleksiyonlar
‫için AI numaralandırılabilir arayüze sahip olduğunuz genel koleksiyonlar için çalışır.
‫Bu nedenle, genel ve genel olmayan koleksiyonların ne olduğunu da anlamalısınız.
‫Bazı avantajları ve dezavantajları var ama bunun için de bir videom var.
‫Umarım bu videoyu izlemeden önce izlemişsinizdir çünkü aksi takdirde biraz karmaşık olacaktır.
‫Tamam.
‫Elimizdeki bu iki taneye bir göz atalım.
‫Jenerik koleksiyonlar, jenerik olmayan koleksiyonlardan sonra tanıtıldığından, jenerik koleksiyonun
‫kullanılması önerilir.
‫Yani tabiri caizse geliştirilmiş bir versiyon.
‫Bu nedenle, yeni bir proje oluşturuyorsanız, genel sürümü kullanmanız önerilir çünkü genel olmayan koleksiyonlar
‫için bir I enumerable'ın, temelde nesnelerin türlerinin dönüştürülmesi olan boxing ve unboxing'i uygulaması veya gerçekleştirmesi
‫gerekir.
‫Daha sonra AI enumerable tty arayüzünün nasıl kullanılacağını açıklayacağız.
‫Bu yüzden genel koleksiyon arayüzü, genel olmayan koleksiyon arayüzünün üzerinden geçmeyeceğiz çünkü
‫daha az verimli olan kutulama ve kutudan çıkarma nedeniyle önerilmemektedir.
‫Şimdi AI enumerable ile AI enumerator arasındaki farka bakalım.
‫Belki bunları daha önce duymuşsunuzdur.
‫AI enumerable arayüzü, bu arayüzü uygularken uygulamanız gereken tek bir yöntem içerir ve bunu
‫daha sonra buradaki özel örneğimizde yapacağız.
‫Bu yüzden çok daha mantıklı.
‫Yani get enumerate yöntemi uygulamanız gereken yöntemdir ve bir AI enumerator nesnesi döndürür.
‫Dolayısıyla, sınıfınız için bir AI enumerable kullanmak istediğinizde uygulamanız gereken bu yöntem veya
‫sınıfınız için uygulamak istediğiniz şey, daha sonra bir AI enumerator döndüren bu get enumerator yöntemine sahip olmanız
‫gerekir.
‫Yani yapay zeka numaralandırıcısı.
‫Koleksiyonda şu anda bulunduğumuz nesneyi işaret eden bir current özelliğini açığa çıkararak
‫koleksiyonda yineleme yeteneği sağlar.
‫Bu, örneğimizde bunu gerçekten çalıştırdığımızda olacağından çok daha karmaşıktır.
‫Bu yüzden tüm bunların ne anlama geldiğini tam olarak anlayan bir örnek oluşturacağız.
‫Yani bu sadece sizi neler bekleyebileceğinize hazırlamak için.
‫Pekâlâ, başlayalım.
‫Son olarak tüm bu teoriden uzaklaşarak, aslında pratiğe bakalım.
‫Şimdi köpek adında küçük bir sınıf oluşturalım.
‫İşleri basit tutmak için aynı dosyaya koyacağım.
‫Yani Dog adında bir sınıfımız ve is Naughty Dog adında bir Boolean'ımız var.
‫Yani temel olarak köpeğin yaramaz olup olmadığını kontrol edeceğiz.
‫Ve buna dayanarak ona ödüller vereceğiz.
‫Yani eğer yaramaz bir köpek değilse, uslu bir çocuk ya da uslu bir köpek olduğundan daha az ödül alacaktır.
‫Yani buradaki kurucu temel olarak sadece bu iki değeri ayarlar.
‫Yani bir köpek nesnesi oluşturduğumuzda, ona bir isim ve köpeğin yaramaz olup olmadığını gösteren bir boolean
‫vereceğiz.
‫Ve sonra bu hediye ödül yöntemimiz var ve bu temelde sadece köpeğin Woof dediğini yazdıracak.
‫Yani köpeğe verilen her bir ödül için Hav diyecektir.
‫Yani temel olarak, eğer iyi bir köpekse, iki ödül alacaksınız ve o da iki kez hareket edecek.
‫Ve eğer kötü ya da yaramaz bir köpekse, o zaman sadece bir kez hareket edecektir çünkü daha az ödül alacaktır.
‫Tamam.
‫Şimdi bu dock sınıfına sahibiz ve artık devam edip köpek nesneleri oluşturabiliriz.
‫Diğer sınıfı da alalım.
‫Bir liste içinde köpekleri kullanacak başka bir sınıfımız olduğunu varsayalım.
‫Bu yüzden köpek barınağı sınıfımız var.
‫Yani bu köpek barınağı sınıfında köpeklerin bir listesi olacak.
‫Bu nedenle, liste genel bir koleksiyon olduğu için sistem koleksiyonlarını genel olarak kullandığımızdan
‫emin olmamız gerekir.
‫Burada, en üstte, şimdi bu using system collections generic'e sahip olduğunuzu göreceksiniz.
‫Tamam.
‫Şimdi bu köpek barınağına sahip olduğumuza ve bu köpek barınağının kurucusunda bu köpek listesine sahip
‫olduğumuza göre, yapacağımız tek şey bu köpek listesini bir grup köpekle başlatmaktır.
‫Casper köpeğimiz ya da Casper adında bir köpeğimiz var.
‫Yaşlı bir köpek değil, ama yaramaz bir köpekse, Oreo yaramaz değil ve Pixel de yaramaz değil.
‫Bu isimleri nasıl bulduğumuzu sormayın ama bu köpekleri temelde böyle çağıracağız.
‫Elbette tüm bu uygulamayı çok daha karmaşık hale getirebilirsiniz, ancak bizim fikrimiz temelde
‫bu köpek listesini köpek barınağı boyunca yinelemek için kullanmaktır.
‫Ve bir köpeğin iyi olup olmadığına ya da yaramaz olup olmadığına bağlı olarak, ona bir ya da iki ödül
‫vereceğiz.
‫Şimdi ana yöntemimize geçelim, çünkü uygulamamızın başlangıç noktası burasıdır.
‫Ve bu noktada, devam edelim ve burada bir köpek barınağı oluşturalım.
‫Tamam.
‫Bu yüzden Shelter adında bir köpek barınağımız var ve bu yeni bir köpek barınağı olacak.
‫Barınak nesnesi köpeklerin bir listesini içereceğinden, bu barınak nesnesini kullanabilmemiz
‫için onu da hemen başlatıyoruz.
‫Doğru.
‫Şimdi yapmak istediğimiz şey, listeyi yinelemek ve onlara ikram vermek isteyip istemediğimizi kontrol
‫etmek.
‫Bu yüzden, bizim için hazırlamak üzere burada her biri için bir çift sekme oluşturalım.
‫Peki içinden geçeceğimiz şey nedir?
‫Bir köpeğin içinden geçiyoruz.
‫Ve bir köpek çağıracağız.
‫Yani listenin içindeki her bir öğe bir köpek olacaktır.
‫Ve sonra üzerinden geçmek istediğimiz koleksiyon aslında sığınak olacak.
‫Sevdim.
‫Şimdi küçük bir sorunumuz var.
‫Üzerine geldiğimizde, burada yinelenecek koleksiyon veya dizinin adının barınak olduğunu
‫görüyoruz, ancak for each deyimi dog shelter türündeki değişkenler üzerinde çalışamaz
‫çünkü dog shelter get enumerator için genel bir örnek veya uzantı tanımı içermez.
‫Tamam, işte bu get enumerator'ımız var.
‫Peki bu ne anlama geliyor?
‫Bu, köpek barınağımız için I enumerable arayüzünü uygulamamız gerektiği anlamına gelir çünkü bu köpek barınağında yinelemek
‫istediğimiz bir liste vardır.
‫Değil mi?
‫Çünkü bakarsanız, barınak, yani köpek barınağımız, yinelemek istediğimiz barınaktır.
‫Ve bunu yinelenebilir hale getirmek için, AI enumerable'ı burada uygulamamız gerekir.
‫Ve ne tür nesneleri listelemek istiyoruz?
‫Bizim durumumuzda, köpekler olacak.
‫Bu yüzden köpek barınağının içindeki köpekler arasında gezinebilmek istiyoruz çünkü köpekler
‫listemiz var ve burada köpek barınağı kurucusunda başlatıldı.
‫Ve hepsinin arasından geçip köpeklerle bir şeyler yapabildiğimizden emin olmak istiyoruz, onları
‫sevmek ya da bizim durumumuzda onlara ödül vermek gibi.
‫Yani bunu uyguladığınızda ve buraya çıktığınızda hata ortadan kalkıyor.
‫Birdenbire her şey yoluna girdi çünkü bir köpek barınağı olan barınağımız artık bize verilen
‫talimatları uyguluyor ve bunu uygulaması gerekiyor.
‫Burada sayılabilir.
‫Yani bu genel I numaralandırılabilir çünkü burada bu dokümanımız var.
‫Değil mi?
‫Çünkü bu değil.
‫Ona verdiğimiz tipte olan.
‫Ancak şimdi, üzerine geldiğimizde başka bir hata aldığımızı görüyoruz.
‫Doc Shelter'ın arayüz üyesini uygulamadığını söylüyor.
‫I enumerable doc get enumerator ve I enumerable get enumerator, böylece bunları manuel olarak oraya koyabiliriz.
‫Ancak bir ID kullanmanın güzelliği, ID'nin bizim için birçok iş yapabilmesidir, bu nedenle potansiyel düzeltmeleri göster
‫seçeneğine tıklayabilir ve ardından tüm üyeleri açıkça uygula seçeneğine tıklayabilirsiniz; bu durumda koleksiyonlar
‫ad alanını bizim için ekleyecek ve bizim için bu iki yöntemi veya bu iki üyeyi eklemeyi halledecektir.
‫Yani buna tıkladığımızda, bu hatanın ortadan kalkacağını göreceksiniz.
‫Daha da aşağı kaydırırsak, şimdi doc türünde bir numaralandırıcı ve genel olmayan bir I numaralandırıcı koleksiyonu
‫döndürdüğümüzü göreceksiniz.
‫Bu yüzden henüz uygulamadık.
‫Bu yüzden burada yeni uygulanmamış x istisnasını fırlatıyoruz.
‫Bu yüzden burada bunu değiştirmemiz gerekiyor.
‫Şimdi get enumerator metodumuz çağrıldığında ne olması gerektiğini uygulayabiliriz.
‫Bunu düzeltmek için burada söyleyeceğimiz şey sadece geri dönmektir.
‫Köpekler listemizdeki köpekler nokta numaralandırıcıyı aynen bu şekilde alır.
‫Ve bu uygulama olacaktır çünkü köpek barınağımız artık enumerable arayüzünü uygulamaktadır.
‫Ve buradaki listemiz aslında A, eğer üzerine gelirseniz, liste genel bir listedir.
‫Ve şimdi bu liste köpeklerini alabilir ve her bir grubumuzun geçeceği her bir yineleme için numaralandırıcı
‫elde edebiliriz.
‫Yani temel olarak tek tek köpekleri geri getirecektir.
‫Ve şimdi yapabileceğimiz şey, köpeği burada for each döngümüzde kullanabiliriz.
‫Bu da demek oluyor ki artık köpeğin yaramaz olup olmadığını kontrol edebiliriz.
‫Yani köpek nokta yaramaz değil.
‫Eğer durum buysa, bu temel olarak köpek yaramaz değilse, yöntemi çağıracağız, ödül vereceğiz
‫ve ona iki ödül vereceğiz anlamına gelir.
‫Aksi takdirde, eğer yaramazlık yaptıysa, çünkü ödül vermemezlik edemeyiz, köpekleri çok seviyoruz.
‫Onlara bu şekilde sadece bir ödül vereceğiz.
‫Ve bu noktada, uygulamamızı çalıştırabiliriz.
‫Ve göreceğiz.
‫Casper iki kez Wolf dedi, çünkü o iyi bir köpek, sniff yaramaz bir köpek, bu yüzden sadece bir ödül
‫alıyor ve hav diyor, Oreo bunu iki kez yaptığında pikseller de iki kez hareket ediyor.
‫Tamam.
‫Ve temel olarak sınıfınızın talimatları takip etmesini veya bir AI enumerable uygulamasını nasıl yapabileceğinizi, böylece
‫örneğin burada olduğu gibi for each döngüsünü kullanarak bir liste boyunca döngü yapabilmenizi sağlar.
‫Şimdi, neden kapı numaralandırıcısını genel olmayan AI numaralandırılabilir ile uygulamadığımızı
‫merak edebilirsiniz.
‫Bunun nedeni jenerik olmayan bir örnek kullanmamamız ve köpek barınağımızın da jenerik
‫olmamasıdır, ancak AI enumerable arayüzünü kullanırken bunu uygulamanız gerekir, çünkü aksi takdirde ondan
‫kurtulursanız, burada yine bir uyarı alırız.
‫Burada gördüğünüz gibi, aslında hatalıyız, bu yüzden bu metodun da orada olduğundan emin olmamız gerekiyor.
‫Tamam.
‫Bu video için bu kadar.
‫Ve bir sonraki videoda, gözün avantajlarından yararlanacağımız başka bir örneğe bakacağız, sayısız
‫hatta daha fazla.
‫Yani bu sadece küçük bir girişti.
‫Bu konunun oldukça karmaşık ve karmaşık olduğunu biliyorum, ancak bunlardan biraz daha yararlanacağız.
‫Ve şimdi, bu arada, sadece kısa bir özet geçeceğim.
‫AI enumerable arayüzünün ne zaman kullanılması önerilir?
‫Koleksiyonunuz büyük bir veritabanı tablosunu temsil ettiğinde bunu kullanmalısınız.
‫Yani veritabanı çok büyük olabileceği için tümünü belleğe kopyalayıp uygulamanızda performans sorunlarına neden olmak
‫istemezsiniz, değil mi?
‫Milyonlarca giriş olabilir.
‫Ve yinelemek için tümünü yüklemek zorunda kalmak istemezsiniz, ancak yürütmek istediğiniz
‫her neyse, yalnızca mevcut işlem için ihtiyaç duyduğunuz kadarını yüklemek istersiniz.
‫Peki AI enumerable arayüzünü ne zaman kullanmamalısınız?
‫Sonuçlara hemen ihtiyaç duyduğunuzda ve muhtemelen nesneleri daha sonra değiştirip düzenlediğinizde.
‫Bu durumda, bir dizi veya liste kullanmak daha iyidir.
‫Dolayısıyla, nesneleri daha sonra değiştirebilmek veya düzenleyebilmek istediğinizde ve sonuca hemen ihtiyacınız olmadığında,
‫bir dizi veya liste kullanın.
‫Aksi takdirde bir AI enumerable kullanın çünkü bu daha verimli olacaktır.
‫Tamam.
‫Bu video için bu kadar.
‫Bir sonrakinde görüşürüz.