Yaygın Yineleme Hataları
Yineleme sırasında değişiklik yapma.
Yaygın Yineleme Hataları, CoddyKit'te ücretsiz bir C# Academy dersidir. Bu, 4 dersinin 4. 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.
Yineleme Tuzakları
Döngüler basittir, ancak birkaç hata yeni başlayanları tekrar tekrar zor durumda bırakır.
Bu derste en yaygın yineleme hatalarına ve bunlardan nasıl kaçınacağınıza bakacağız.
Yineleme Sırasında Değiştirme
En büyük hata, bir koleksiyon üzerinde foreach ile yineleme yaparken koleksiyonu değiştirmektir.
Yineleme sırasında öğe eklemek veya kaldırmak, çalışma zamanında bir InvalidOperationException oluşturur.
foreach (var n in list)
{
if (n < 0) list.Remove(n); // ERROR at runtime
}Güvenli Çözüm
Döngü sırasında öğe kaldırmak için bir kopya üzerinde yineleme yapın veya önce öğeleri toplayıp daha sonra kaldırın.
list.ToList() üzerinde döngü kurmak, üzerinde ilerleyebileceğiniz ayrı bir anlık görüntü sağlar.
var list = new List<int> { 1, -2, 3, -4 };
foreach (var n in list.ToList())
{
if (n < 0) list.Remove(n);
}
Console.WriteLine(string.Join(",", list));for Döngülerinde Bir Eksik/Bir Fazla Hatası
Elle yazılan bir for döngüsünde < yerine <= kullanmak, sonun dışındaki bir konumu okumaya çalışır.
Geçerli dizinler 0'dan Length - 1 değerine kadar gider; bu nedenle koşul i < Length olmalıdır.
for (int i = 0; i <= arr.Length; i++) // BUG: <= goes too far
{
Console.WriteLine(arr[i]);
}IndexOutOfRange
Bu bir eksik/bir fazla hatası, bir IndexOutOfRangeException oluşturur.
foreach hiçbir zaman dizin kullanmadığı için bu sorunu tamamen önler. Yalnızca öğeleri okumanız gerektiğinde onu tercih edin.
string[] arr = { "a", "b", "c" };
for (int i = 0; i < arr.Length; i++) // correct: < Length
{
Console.WriteLine(arr[i]);
}foreach'in Öğeleri Değiştirmesini Beklemek
Döngü değişkenine atama yapmak koleksiyonu değiştirmez; değer türlerinde bu değişken zaten bir kopyadır.
Öğeleri güncellemek için dizin kullanan bir for döngüsü kullanın.
int[] nums = { 1, 2, 3 };
for (int i = 0; i < nums.Length; i++)
{
nums[i] = nums[i] * 10;
}
Console.WriteLine(string.Join(",", nums));Null Koleksiyon
Bir null başvuru üzerinde foreach çağırmak, bir NullReferenceException oluşturur.
Boş bir koleksiyon sorun değildir, ancak null sorun oluşturur. Döngüden önce kontrol edin veya bir başlangıç değeri atayın.
List<int> data = null;
if (data != null)
{
foreach (var x in data) Console.WriteLine(x);
}Değişken Kapsamı Karışıklığı
Döngü değişkeni yalnızca döngü gövdesinin içinde bulunur.
Döngüden sonra onu kullanmaya çalışmak bir derleme hatasıdır; çünkü döngü sona erdiğinde kapsam dışına çıkar.
foreach (var n in nums)
{
Console.WriteLine(n);
}
// Console.WriteLine(n); // ERROR: n not in scope hereSüslü Parantezleri Unutmak
Süslü parantezler olmadığında döngüye yalnızca kendisinden sonraki tek ifade dahil olur.
Bu durum mantığı fark ettirmeden bozabilir. Amacı açık tutmak için çok satırlı gövdelerde her zaman süslü parantez kullanın.
foreach (var n in nums)
Console.WriteLine(n);
Console.WriteLine("runs once, not per item");while İçinde Sonsuz Döngü Riski
foreach döngüsünün aksine, koşulu hiçbir zaman false olmadığında bir while döngüsü sonsuza kadar çalışabilir.
Döngünün içinde bir şeyin çıkış koşuluna doğru ilerlediğinden her zaman emin olun.
int i = 0;
while (i < 3)
{
Console.WriteLine(i);
i++; // forgetting this would loop forever
}Doğru Döngüyü Seçme
Her öğeyi okuyun, dizin gerekmiyor → foreach.
Dizine ihtiyacınız var veya yerinde değişiklik yapmanız gerekiyor → for. Bir koşul değişene kadar tekrarlayın → while.
Hızlı Kontrol
Yineleme hataları hakkında öğrendiklerinizi sınayın.
Özet
foreach sırasında bir koleksiyonu değiştirmekten, <= ile yapılan bir eksik/bir fazla hatalarından, null koleksiyonlardan ve kapsam karışıklığından kaçınmayı öğrendiniz.
Okumak için foreach, dizine göre değiştirmek için for, çıkışı açıkça belirlenmiş koşul tabanlı döngüler için while seçin.
Sıkça Sorulan Sorular
“Yaygın Yineleme Hataları” dersi ücretsiz mi?
Evet — “Yaygın Yineleme Hataları” 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.
“Yaygın Yineleme Hataları” dersinde ne öğreneceğim?
Yineleme sırasında değişiklik yapma. 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 4. dersidir.
“Yaygın Yineleme Hataları” 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
- foreach Döngüsü
- Koleksiyonlar Üzerinde Yineleme
- break ve continue
- Yaygın Yineleme Hataları