yield return ile Yineleyici Yöntemleri
Dizileri her seferinde bir öğe üreterek oluşturun.
yield return ile Yineleyici Yöntemleri, CoddyKit'te ücretsiz bir C# Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C# Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C# Academy kursu toplamda 4 dersten oluşur.
Yineleyici Yöntemi Nedir
Bir yineleyici yöntemi, yield return kullanarak değerlerden oluşan bir diziyi teker teker üretir. Derleyici bunu bir durum makinesine dönüştürdüğü için listeyi kendiniz oluşturup yönetmeniz gerekmez.
İlk yield return İfadeniz
Her yield return, bir değeri çağırana geri verir ve yöntemi duraklatır. Yürütme, sonraki yinelemede bu ifadenin hemen ardından devam eder.
using System;
using System.Collections.Generic;
public class Program
{
static IEnumerable<int> FirstThree()
{
yield return 1;
yield return 2;
yield return 3;
}
public static void Main()
{
foreach (var n in FirstThree())
Console.WriteLine(n);
}
}Döngü İçinde yield return
Yineleyicilerin çoğu bir döngü içinden değer üretir. Burada hiçbir koleksiyon oluşturmadan ilk count çift sayıyı üretiriz.
using System;
using System.Collections.Generic;
public class Program
{
static IEnumerable<int> Evens(int count)
{
for (int i = 0; i < count; i++)
yield return i * 2;
}
public static void Main()
{
foreach (var n in Evens(5))
Console.WriteLine(n);
}
}Yöntem IEnumerable Döndürür
Bir yineleyici yöntemi IEnumerable<T> veya IEnumerator<T> (ya da genel olmayan sürümleri) döndürmelidir. Bir değerle birlikte hiçbir zaman return yazmazsınız; yalnızca yield return kullanırsınız.
using System;
using System.Collections.Generic;
public class Program
{
static IEnumerable<string> Greetings()
{
yield return "hello";
yield return "hi";
yield return "hey";
}
public static void Main()
{
foreach (var g in Greetings())
Console.WriteLine(g);
}
}Yürütme Duraklatılır ve Sürdürülür
yield ifadeleri arasındaki durum otomatik olarak korunur. Yerel değişkenler duraklamalar boyunca değerlerini korur; biriken toplamları üretmeyi kolaylaştıran şey budur.
using System;
using System.Collections.Generic;
public class Program
{
static IEnumerable<int> RunningTotal(IEnumerable<int> nums)
{
int total = 0;
foreach (var n in nums)
{
total += n;
yield return total;
}
}
public static void Main()
{
foreach (var t in RunningTotal(new[] { 1, 2, 3, 4 }))
Console.WriteLine(t);
}
}Sonsuz Diziler Üretme
Değerler gerektiğinde üretildiği için bir yineleyici sonsuz bir diziyi güvenle tanımlayabilir. Değerleri ne zaman istemeyi bırakacağına çağıran karar verir.
using System;
using System.Collections.Generic;
public class Program
{
static IEnumerable<int> Naturals()
{
int i = 1;
while (true) yield return i++;
}
public static void Main()
{
int taken = 0;
foreach (var n in Naturals())
{
Console.WriteLine(n);
if (++taken == 5) break;
}
}
}Girdi Dizisini Dönüştürme
Yineleyiciler işlem hatları oluşturmada başarılıdır: bir diziden öğeleri okur, dönüştürür ve sonuçları tembel biçimde üretirler.
using System;
using System.Collections.Generic;
public class Program
{
static IEnumerable<string> Labelled(IEnumerable<int> nums)
{
foreach (var n in nums)
yield return "item-" + n;
}
public static void Main()
{
foreach (var s in Labelled(new[] { 10, 20, 30 }))
Console.WriteLine(s);
}
}Yineleyicilerle Filtreleme
Filtrelemek için yalnızca istediğiniz öğeleri üretmeniz yeterlidir. Atlanan öğeler hiçbir zaman üretilmediği için aşağı akıştaki kod onları görmez.
using System;
using System.Collections.Generic;
public class Program
{
static IEnumerable<int> OnlyPositive(IEnumerable<int> nums)
{
foreach (var n in nums)
if (n > 0) yield return n;
}
public static void Main()
{
foreach (var n in OnlyPositive(new[] { -2, 5, -1, 8 }))
Console.WriteLine(n);
}
}Derleyici Bir Durum Makinesi Oluşturur
Derleyici arka planda yineleyicinizi IEnumerator<T> uygulayan bir sınıfa dönüştürür; gizli bir durum alanını ve Current değerini izler. Tüm bu mekanizma sizin için otomatik olarak oluşturulur.
using System;
using System.Collections.Generic;
public class Program
{
static IEnumerable<char> Letters()
{
yield return 'a';
yield return 'b';
yield return 'c';
}
public static void Main()
{
IEnumerator<char> e = Letters().GetEnumerator();
while (e.MoveNext())
Console.WriteLine(e.Current);
}
}Birden Çok Yineleyiciyi Birleştirme
Yineleyiciler doğal biçimde zincirlenir; çünkü her biri bir IEnumerable<T> döndürür. Okunaklı işlem hatları oluşturmak için bir yineleyicinin çıktısını sonraki yineleyiciye aktarın.
using System;
using System.Collections.Generic;
public class Program
{
static IEnumerable<int> Range(int start, int count)
{
for (int i = 0; i < count; i++) yield return start + i;
}
static IEnumerable<int> Squares(IEnumerable<int> nums)
{
foreach (var n in nums) yield return n * n;
}
public static void Main()
{
foreach (var n in Squares(Range(1, 4)))
Console.WriteLine(n);
}
}Kendiniz Deneyin
Bir girdi dizisini sabit boyutlu parçalara ayıran bir yineleyici yazın. Bu yineleyici listeleri gerektiğinde üretir ve ne kadar çok mantığın tek bir temiz yineleyiciye sığabildiğini gösterir.
using System;
using System.Collections.Generic;
public class Program
{
static IEnumerable<List<int>> Batch(IEnumerable<int> source, int size)
{
var bucket = new List<int>();
foreach (var n in source)
{
bucket.Add(n);
if (bucket.Count == size) { yield return bucket; bucket = new List<int>(); }
}
if (bucket.Count > 0) yield return bucket;
}
public static void Main()
{
foreach (var group in Batch(new[] { 1, 2, 3, 4, 5 }, 2))
Console.WriteLine(string.Join(",", group));
}
}Hızlı Kontrol
Yineleyici yöntemlerinin nasıl çalıştığını hatırlayın.
Özet
Yineleyici yöntemleri, dizileri gerektiğinde üretmek için yield return kullanır.
- Yöntem
IEnumerable<T>veyaIEnumerator<T>döndürür. - Her
yield returnbir değer üretir ve yürütmeyi duraklatırken yerel durumu korur. - Sonsuz dizileri güvenle tanımlayabilirler.
- Derleyici durum makinesini sizin için oluşturur.
Sıkça Sorulan Sorular
“yield return ile Yineleyici Yöntemleri” dersi ücretsiz mi?
Evet — “yield return ile Yineleyici Yöntemleri” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C# Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C# Academy kursu toplamda 4 dersten oluşur.
“yield return ile Yineleyici Yöntemleri” dersinde ne öğreneceğim?
Dizileri her seferinde bir öğe üreterek oluşturun. C# Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
C# Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te C# Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.
“yield return ile Yineleyici Yöntemleri” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu C# Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her C# Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- yield return ile Yineleyici Yöntemleri
- yield break ve Erken Sonlandırma
- Tembel Değerlendirme Anlambilimi
- Özel Enumerable'lar