İçeriğe geç
Educora
Başlangıç22 dk4 / 16

Döngüler, diziler ve koleksiyonlar

İşleri `for`, `while` ve `foreach` döngüleriyle tekrarla; verileri dizilerde, `List<T>` ve `Dictionary<TKey,TValue>` koleksiyonlarında sakla.

Kendini test et
Bu derste öğreneceklerin
  • for, while ve do-while döngüleri yazmak ve onları break ile continue ile yönetmek
  • Dizi oluşturmak ve elemanlarını foreach ile dolaşmak
  • List<T>'ye eleman eklemek ve ondan eleman çıkarmak
  • Dictionary<TKey,TValue>'da değerleri anahtara göre saklamak ve bulmak

7 çarpım tablosunu ekrana yazmak için on tane Console.WriteLine satırı yazabilirsin. Peki 1000 satır gerekirse? Programlamada tekrar eden işi döngüler yapar. Döngüler genellikle koleksiyonlarla birlikte çalışır: sınıftaki tüm öğrencilerin notları, sepetteki ürünler, depodaki mallar gibi birçok değeri tek bir yerde tutan diziler, listeler ve sözlüklerle.

for ve while döngüleri

for döngüsü, adım sayısı önceden bilindiğinde kullanışlıdır. Başlığında noktalı virgülle ayrılmış üç bölüm vardır: sayacın başlangıç değeri (int i = 1), devam koşulu (i <= 5) ve her adımdan sonraki değişiklik (i++).

C#
for (int i = 1; i <= 5; i++)
{
    Console.WriteLine($"7 x {i} = {7 * i}");
}
Beklenen çıktı
7 x 1 = 7
7 x 2 = 14
7 x 3 = 21
7 x 4 = 28
7 x 5 = 35

while döngüsü koşul doğru olduğu sürece tekrarlanır; adım sayısı önceden bilinmediğinde kullanılır. Örneğin Elvin'in kumbarasında 100 manat var ve her ay 20 manat daha ekliyor. Kaç ay sonra 150 manata ulaşır?

C#
int savings = 100;
int months = 0;

while (savings < 150)
{
    savings += 20;
    months++;
}

Console.WriteLine($"After {months} months: {savings} AZN");
Beklenen çıktı
After 3 months: 160 AZN

Diziler ve foreach

Dizi (array), aynı türden değerlerin sabit boyutlu bir sırasıdır. Değerleri köşeli parantez içinde sıralayarak oluşturulabilir. Elemanlara indeksle erişilir: ilk eleman [0], sonuncusu [^1]'dir. Bir dizinin tüm elemanlarını dolaşmanın en kolay yolu foreach döngüsüdür.

C#
int[] scores = [90, 75, 88, 62];

Console.WriteLine(scores[0]);
Console.WriteLine(scores[^1]);
Console.WriteLine(scores.Length);

scores[3] = 70;

int sum = 0;
foreach (int s in scores)
{
    sum += s;
}
Console.WriteLine($"Sum: {sum}, average: {sum / scores.Length}");
Beklenen çıktı
90
62
4
Sum: 323, average: 80

[90, 75, 88, 62] yazımı, C# 12 ile gelen bir koleksiyon ifadesidir. Eski kodlarda aynı dizi new int[] { 90, 75, 88, 62 } şeklinde yazılır; new int[5] ise beş sıfırdan oluşan bir dizi oluşturur. Dizinin boyutu oluşturulduktan sonra değiştirilemez.

Etkileşimli
Simülasyon yükleniyor…
Doğrusal arama: döngü dizinin elemanlarını tek tek kontrol eder ve aranan değeri bulunca durur.

break döngüyü hemen durdurur, continue ise mevcut adımın geri kalanını atlayıp bir sonraki adıma geçer:

C#
int[] numbers = [4, 7, 10, -1, 12];

foreach (int n in numbers)
{
    if (n < 0)
    {
        Console.WriteLine("Negative number, stop.");
        break;
    }
    if (n % 2 != 0)
        continue;
    Console.WriteLine($"{n} is even");
}
Beklenen çıktı
4 is even
10 is even
Negative number, stop.
7 tek olduğu için atlandı, 12'ye ise sıra hiç gelmedi.

`List<T>`: büyüyen liste

Eleman sayısı değişecekse dizi yerine List<T> kullanılır. Açılı parantez içindeki T, elemanların türüdür: List<string> bir string listesi, List<int> bir sayı listesidir. Bu tür türlere generic (genel) türler denir. Eleman sayısını Count özelliği gösterir.

C#
List<string> cities = ["Baku", "Ganja"];

cities.Add("Shaki");
cities.Insert(0, "Lankaran");
cities.Remove("Ganja");

Console.WriteLine(cities.Count);
Console.WriteLine(string.Join(", ", cities));
Console.WriteLine(cities.Contains("Baku"));
Console.WriteLine(cities.IndexOf("Shaki"));
Beklenen çıktı
3
Lankaran, Baku, Shaki
True
2
  • Add(x) elemanı sona, Insert(i, x) ise i konumuna ekler.
  • Remove(x) bir değeri, RemoveAt(i) ise i indeksindeki elemanı siler.
  • Contains(x) elemanın olup olmadığını, IndexOf(x) ise indeksini (yoksa -1) verir.
  • string.Join(", ", cities) tüm elemanları tek bir string'de birleştirir.

`Dictionary<TKey,TValue>`: anahtar ve değer

Bir sözlük (dictionary), her değeri benzersiz bir anahtar altında saklar; telefon rehberindeki isim ve numaralar gibi. Dictionary<string, int>, anahtarları string, değerleri int olan bir sözlüktür. Değere anahtarıyla erişilir: stock["apples"]. Var olmayan bir anahtarı okumak KeyNotFoundException hatası verir; bu yüzden güvenli kontrol için TryGetValue kullanılır.

C#
Dictionary<string, int> stock = new()
{
    ["apples"] = 40,
    ["pears"] = 15
};

stock["plums"] = 25;
stock["apples"] -= 5;

foreach (var (fruit, amount) in stock)
{
    Console.WriteLine($"{fruit}: {amount}");
}

if (stock.TryGetValue("kiwi", out int kiwis))
    Console.WriteLine($"Kiwi: {kiwis}");
else
    Console.WriteLine("No kiwi in stock");
Beklenen çıktı
apples: 35
pears: 15
plums: 25
No kiwi in stock

foreach (var (fruit, amount) in stock), her çifti anahtarına ve değerine ayırır. TryGetValue, anahtar bulunursa true döndürür ve değeri out ile verilen değişkene yazar; out'u metotlar dersinde ayrıntılı ele alacağız.

KoleksiyonNe zaman seçilirÖrnek
T[]eleman sayısı sabittirhaftanın 7 günü
List<T>elemanlar eklenir ve çıkarılıralışveriş sepeti
Dictionary<TKey,TValue>değerlerin anahtarla hızlıca bulunması gerekirşehir → nüfus

Önemli noktalar

  • for belirli sayıda, while ise koşul doğru olduğu sürece tekrarlanır; do-while en az bir kez çalışır.
  • break döngüyü durdurur, continue bir sonraki adıma geçer.
  • Dizinin boyutu sabittir ve indeksler 0'dan başlar; foreach tüm elemanları dolaşır.
  • List<T> büyüyüp küçülebilir: Add, Remove, Count.
  • Dictionary<TKey,TValue> değerleri anahtara göre saklar; TryGetValue güvenli aramadır.

Kendini test et

10 soru. Her doğru cevap XP kazandırır.

1 / 10
for (int i = 0; i < 3; i++) döngüsü kaç kez tekrarlanır?