C# programlama eğitim serimizde harika bir ilerleme kaydediyorsunuz! Değişkenleri, veri tiplerini, operatörleri ve programlarımıza karar verdirmeyi sağlayan if-else koşullu ifadelerini geride bıraktık. Şimdi ise bilgisayarların en iyi yaptığı işe, yani “tekrarlı işlemlere” giriş yapıyoruz.
Bir senaryo düşünün: Web sitenize kayıt olan 1000 kullanıcının her birine “Hoş Geldiniz” maili atmak istiyorsunuz. Ya da ekrana 1’den 100’e kadar olan sayıları yazdırmanız gerekiyor. Console.WriteLine("1");, Console.WriteLine("2"); diyerek alt alta yüzlerce satır kod yazmak sizce mantıklı mı? Elbette hayır! Programlamada en temel prensiplerden biri DRY (Don’t Repeat Yourself – Kendini Tekrar Etme) prensibidir.
İşte aynı işlemi belirli bir kurala bağlı kalarak defalarca yaptırmamızı sağlayan programlama yapılarına Döngüler (Loops) diyoruz. Bu kapsamlı rehberimizde, C# dilinde en çok kullanılan döngü çeşidi olan For Döngüsünü (For Loop) günlük hayattan örneklerle en ince ayrıntısına kadar öğreneceğiz.
1. For Döngüsü Nedir ve Nasıl Çalışır?
For döngüsü, bir kod bloğunun önceden belirlenmiş bir sayı kadar art arda çalıştırılmasını sağlayan yapıdır. Eğer bir işlemin kaç kere tekrar edeceğini tam olarak biliyorsanız (örneğin: “bu işlemi 10 kere yap”, “listeyi 50 kere tara”), kullanmanız gereken en ideal döngü for döngüsüdür.
Bunu bir atletizm pistine benzetebiliriz. Antrenör atlete: “Pistte tam 5 tur koşacaksın” der.
- Başlangıç: Atlet 0. turdadır (Başlama çizgisi).
- Koşul: Atılan tur sayısı 5’ten küçük olduğu sürece koşmaya devam et.
- Artış: Atlet her bir turu tamamladığında, tur sayacını 1 artır.
C# dilinde bu mantığı koda dökmek için for anahtar kelimesini kullanırız.
2. C# For Döngüsünün Anatomisi (Sözdizimi)
Bir for döngüsü her zaman parantez içinde, noktalı virgüllerle (;) ayrılmış üç temel bölümden oluşur:
for (1. Bölüm: Başlangıç ; 2. Bölüm: Koşul ; 3. Bölüm: Artış/Azalış)
{
// Koşul doğru (true) olduğu sürece tekrar tekrar çalışacak kodlar
}
- 1. Başlangıç (Initialization): Döngünün sayacı olan değişkenin yaratıldığı yerdir. Sadece döngü başlarken bir kez çalışır. (Örn:
int i = 1;) - 2. Koşul (Condition): Her döngü turundan (iterasyon) önce kontrol edilir. Eğer bu koşul doğruysa (
true) döngünün içindeki kodlar çalışır, yanlışsa (false) döngü biter ve program yoluna devam eder. (Örn:i <= 10;) - 3. Artış/Azalış (Iterator): Döngünün içindeki kodlar çalışıp bittikten sonra sayacın nasıl güncelleneceğini belirler. (Örn:
i++sayacı 1 artırır).
3. İlk For Döngümüz: 1’den 10’a Kadar Saymak
Önceki derslerimizde modern C# sürümleriyle (C# 9 ve sonrası) gelen Top-level statements (Üst düzey ifadeler) özelliğini öğrenmiştik. Bu sayede gereksiz class ve Main metotları yazmadan, kodlarımızı doğrudan dosyamıza yazarak hızlıca çalıştırabiliriz.
Hemen ilk döngümüzü yazalım ve ekrana 1’den 10’a kadar olan sayıları yazdıralım:
// i değişkeni 1'den başlar; i 10'dan küçük veya eşit olduğu sürece çalışır; her turda i'yi 1 artırır.
for (int i = 1; i <= 10; i++)
{
Console.WriteLine($"Şu anki sayı: {i}");
}
Console.WriteLine("Döngü bitti, program sona erdi!");
Adım Adım Ne Oldu?
- Sistem
int i = 1değişkenini hafızada oluşturdu. - Koşulu kontrol etti: 1, 10’dan küçük veya eşit mi? Evet (
true). - Süslü parantez
{ }içindeki koda girdi ve ekrana “Şu anki sayı: 1” yazdırdı. - Parantezin sonuna gelince 3. bölüme gidip
i++komutunu çalıştırdı. Artıki‘nin değeri 2 oldu. - Tekrar koşula baktı: 2, 10’dan küçük veya eşit mi? Evet. Ekrana 2 yazdırdı.
- Bu işlem
i‘nin değeri 11 olana kadar sürdü. 11 olduğunda11 <= 10koşulufalse(yanlış) sonuç verdiği için döngü kırıldı ve ekrana “Döngü bitti…” yazıldı.
4. Döngü Kurallarını Esnetmek (Farklı Artış ve Azalışlar)
for döngüsündeki sayacı illa 1’er 1’er artırmak zorunda değiliz. Önceki “Operatörler” konumuzda öğrendiğimiz += veya -- gibi atama operatörlerini kullanarak farklı senaryolar üretebiliriz.
Örnek 1: Çift Sayıları Yazdırmak (2’şer Artış)
Console.WriteLine("0'dan 20'ye kadar olan Çift Sayılar:");
for (int sayac = 0; sayac <= 20; sayac += 2)
{
Console.WriteLine(sayac);
}
Örnek 2: Geriye Doğru Sayım Yapmak (Azalış)
Console.WriteLine("Geri sayım başlıyor!");
// Sayacımız 10'dan başlasın, 0'dan büyük olduğu sürece çalışsın ve her turda 1 azalsın.
for (int i = 10; i > 0; i--)
{
Console.WriteLine($"{i}...");
System.Threading.Thread.Sleep(1000); // Programı 1 saniye bekletir, heyecan katar :)
}
Console.WriteLine("Fırlat!");
5. Gerçek Hayat Senaryosu: Toplam Değeri Bulmak
Sadece ekrana sayı yazdırmak yerine, döngüleri matematiksel algoritmalar kurmak için de kullanırız. Örneğin 1’den 100’e kadar olan tüm sayıların toplamını bulan bir program yazalım:
int toplam = 0;
for (int i = 1; i <= 100; i++)
{
// Her turda, o anki i değerini toplam değişkeninin üzerine ekliyoruz
toplam += i;
}
Console.WriteLine($"1'den 100'e kadar olan sayıların toplamı: {toplam}");
Bu basit döngü mimarisi, finansal hesaplamalardan, e-ticaret sitelerindeki sepet tutarı hesaplamalarına kadar yazılım dünyasının her yerinde kullanılır.
6. Döngülere Müdahale Etmek: break ve continue
Bazen döngü çalışırken özel bir durum gerçekleştiğinde döngüyü tamamen durdurmak veya sadece o turu atlayıp bir sonraki turdan devam etmek isteyebiliriz.
break: Döngüyü anında sonlandırır ve sistemi döngünün dışına atar. (Önceki konumuz olan Switch-Case’ten hatırlayabilirsiniz).continue: Sadece o anki turu pas geçer ve sayacı artırıp bir sonraki koşul kontrolüne atlar.
Örnek Senaryo: 1’den 10’a kadar sayalım. Ancak 5 sayısını es geçelim (uğursuz sayımız olsun) ve sayı 8’e ulaştığında sistemi acil durduralım.
for (int i = 1; i <= 10; i++)
{
if (i == 5)
{
Console.WriteLine("5 sayısını atlıyoruz!");
continue; // 5 için alttaki kodları okumadan bir sonraki tura (i=6) geçer.
}
if (i == 8)
{
Console.WriteLine("Sayı 8'e ulaştı, döngü kırılıyor!");
break; // Döngüyü tamamen iptal eder ve bitirir.
}
Console.WriteLine($"İşlenen sayı: {i}");
}
7. İç İçe For Döngüleri (Nested For Loops)
Döngülerin içerisine başka döngüler yazabiliriz. Bu yapıya İç İçe Döngüler (Nested Loops) denir. Özellikle iki boyutlu düzlemlerde, koordinat sistemlerinde (X, Y eksenleri), tablolarda ve oyun programlamada (örneğin satranç tahtası veya mayın tarlası yaparken) çok sık kullanılırlar.
Dışarıdaki döngünün her 1 turu için, içerideki döngü baştan sona tamamlanır.
Örnek: Yıldızlardan Dikdörtgen Çizmek
// Dış döngü satırları (aşağı doğru) kontrol eder
for (int satir = 1; satir <= 3; satir++)
{
// İç döngü sütunları (yan yana) kontrol eder
for (int sutun = 1; sutun <= 5; sutun++)
{
Console.Write("* "); // WriteLine değil Write, yani alt satıra geçmez yan yana yazar
}
// İç döngüdeki 5 yıldız bitince, alt satıra geçmek için boş bir WriteLine atıyoruz
Console.WriteLine();
}
Çıktı:
* * * * *
* * * * *
* * * * *
.NET Mimarisi ve Döngü Performansı
Başlangıç düzeyindeki bu bilgilerin yanı sıra, döngülerin profesyonel dünyada nasıl işlendiğini bilmek de vizyonunuzu genişletecektir. Modern .NET altyapısı (.NET 8, .NET 9 ve .NET 10), Just-In-Time (JIT) derleyicisi ve Native AOT teknolojileri ile döngülerin performansını inanılmaz derecede optimize eder.
Örneğin JIT derleyicisi, karmaşık yapıdaki (irreducible – indirgenemeyen) döngüleri tespit ettiğinde, bunları “reducible” (indirgenebilir) daha temiz ve basit while/for döngü formlarına dönüştürerek, donanım düzeyinde çok daha az bellek tüketmesini ve uygulamanın mili saniyeler içinde çalışmasını sağlar. Yani siz basit bir for döngüsü yazsanız bile, arka planda C# ve .NET ekosistemi onu devasa bir hızla çalışacak şekilde makine diline adapte eder.
Sonuç
Tebrikler! C# programlamanın en güçlü ve en çok kullanılan mekanizmalarından biri olan For Döngüsü konusunu başarıyla tamamladınız. Artık bilgisayara tekrarlayan işlemleri tek bir satır kod yazarak binlerce kez yaptırabilir, break ve continue gibi komutlarla bu tekrar akışını kendi mantığınıza göre eğip bükebilirsiniz. Bu konuyu iyi kavramak, ileride öğreneceğimiz veritabanı işlemlerinde yüzlerce veriyi listelerken veya oyun motorlarında (Unity) düşmanların yapay zekasını kurgularken işinizin temelini oluşturacaktır.
Öğrendiklerinizi pekiştirmek için IDE’nizi açın ve kendi çarpım tablonuzu ya da yıldızlarla farklı geometrik şekiller çizen iç içe for döngülerinizi oluşturmayı deneyin. Bir sonraki dersimizde, tekrar sayısının belli olmadığı durumlarda kullandığımız While Döngüsü ile kodlama serüvenimize devam edeceğiz!




