İçeriğe geç

C# · 8/8

Sözlükler: bilgiyi isimle saklamak

Bir kaydı anahtar-değer ilişkisiyle temsil edip eksik alanı ele almak.

Önerilen çalışma: 25–45 dakika; örnekleri kendin uygula. Süre kişiye göre değişir.

Bu sayfada · 9 başlık

Başlamadan önce

Önceki dersteki örneği çalıştırmış olman ve dosya/çıktı ayrımını biliyor olman yararlı.

Öğrenme sırası: konuyu oku → çıktıyı tahmin et → örneği değiştir → alıştırmayı çöz → cevabını gerekçelendir.

C# · Sözlükler: bilgiyi isimle saklamak — videolu atölye: açıklamalı kavram şeması
Webino App öğretici şeması · Uygulama ekran görüntüsü değildir.

Videoyla adım adım izle

Türkçe açıklamalı sessiz görsel anlatım. Sesli ders veya kesintisiz ekran kaydı değildir. Duraklatıp kendi ortamında uygula.

Video bölümleri ve tam metin

Sözlükler: bilgiyi isimle saklamak

Bir kaydı anahtar-değer ilişkisiyle temsil edip eksik alanı ele almak.

Kavramı kur

Bir öğrencinin adı ve puanı aynı türden sıra öğeleri değildir; farklı anlamdaki alanlardır. Anahtar-değer yapısı, bu bilgilere konum yerine bir adla erişmeyi sağlar. Böylece 0 konumunun isim olduğunu hatırlamak yerine ad anahtarını okursun. Verinin hangi soruya cevap verdiği yapıda görünür hâle gelir.

Neden böyle çalışıyor?

Her alanın var olacağını varsaymak gerçek veride hataya neden olur. Bir form gönderiminde veya API yanıtında şehir alanı eksik olabilir. Bu durumda varsayılan değer kullanmak, kayıt atlamak veya kullanıcıya düzeltme istemek farklı kararlardır. Önce eksik bilgiye uygulamanın nasıl davranacağını belirle.

Çalışma sırası

Aynı anahtara ikinci kez değer yazmak çoğu yapıda yeni bir bağımsız kayıt oluşturmaz; o anahtarın değerini değiştirir. Birden çok öğrenci saklayacaksan tek öğrenci sözlüğüne isim eklemek yerine kayıtları bir koleksiyonda toplaman gerekebilir. Yapıyı seçmeden önce “bir kayıt mı, birden çok kayıt mı?” sorusunu sor.

İkinci örnek · 1

ad ve puan farklı anlamdaki alanların anahtarlarıdır. Kodun tamamı yazılı derste bulunur.

Kod

using System;
using System.Collections.Generic;
class Program {
  static void Main() {
    var ogrenci = new Dictionary<string, string> {
      ["ad"] = "Elif", ["puan"] = "80"
    };
    Console.WriteLine(ogrenci["ad"]);
    Console.WriteLine(ogrenci["puan"]);
    Console.WriteLine(ogrenci.TryGetValue("sehir", out var sehir) ? sehir : "Belirtilmedi");
  }
}

Beklenen sonucu oku

sehir olmadığı için açık bir yedek değer seçilir.

Beklenen çıktı: Elif 80 Belirtilmedi

Bir değeri sen değiştir

Öğrencinin adını ve puanını değiştir. sehir alanını ekle; yedek yerine gerçek değerin döndüğünü kontrol et.

Hata nereden gelir?

Anahtarı büyük/küçük harf farkıyla yazmak aynı alanı bulmayabilir; adlandırmayı tutarlı yap.

Kendi çözümünü kur

Eksik alanın ekranda nasıl anlatılacağını düşün; sessizce yanlış bir şehir uydurmak yerine açık bir eksik bilgi mesajı yaz. Önce bütün anahtarları yaz. Sonra bir anahtarı kaldırıp eksik bilgi yolunu dene.

Çözüm varyasyonu · 1

Önce kendi denemeni yap; sonra bu varyasyonun girdileri ile sonucunu karşılaştır.

Kod

using System;
using System.Collections.Generic;
class Program {
  static void Main() {
    var ogrenci = new Dictionary<string, string> {
      ["ad"] = "Deniz", ["puan"] = "95"
    };
    Console.WriteLine(ogrenci["ad"]);
    Console.WriteLine(ogrenci["puan"]);
    Console.WriteLine(ogrenci.TryGetValue("sehir", out var sehir) ? sehir : "Belirtilmedi");
  }
}

Kendini kontrol et

İki farklı öğrenci için aynı ad anahtarını tek sözlükte tekrar tekrar yazmak neden yetmez? Yanıt: Aynı anahtarın değeri güncellenir. Birden çok öğrenci için kayıtları ayrı tutan bir koleksiyon gerekir.

Beklenen çıktı: Deniz 95 Belirtilmedi

Konu anlatımı

Bir öğrencinin adı ve puanı aynı türden sıra öğeleri değildir; farklı anlamdaki alanlardır. Anahtar-değer yapısı, bu bilgilere konum yerine bir adla erişmeyi sağlar. Böylece 0 konumunun isim olduğunu hatırlamak yerine ad anahtarını okursun. Verinin hangi soruya cevap verdiği yapıda görünür hâle gelir.

Her alanın var olacağını varsaymak gerçek veride hataya neden olur. Bir form gönderiminde veya API yanıtında şehir alanı eksik olabilir. Bu durumda varsayılan değer kullanmak, kayıt atlamak veya kullanıcıya düzeltme istemek farklı kararlardır. Önce eksik bilgiye uygulamanın nasıl davranacağını belirle.

Aynı anahtara ikinci kez değer yazmak çoğu yapıda yeni bir bağımsız kayıt oluşturmaz; o anahtarın değerini değiştirir. Birden çok öğrenci saklayacaksan tek öğrenci sözlüğüne isim eklemek yerine kayıtları bir koleksiyonda toplaman gerekebilir. Yapıyı seçmeden önce “bir kayıt mı, birden çok kayıt mı?” sorusunu sor.

Dictionary anahtar ve değer türlerini açıkça belirtir. Bu basit örnekte farklı alanları tek yapıda tutmak için değerleri string seçtik; kapsamlı öğrenci modeli için sınıf/record öğrenmelisin. TryGetValue eksik anahtar durumunu istisna atmadan ele almaya yardım eder.

İlk örneği oku ve dene

8

Sözlükler: bilgiyi isimle saklamak

Dictionary, her değeri bir anahtarla saklar; tıpkı bir telefon rehberi gibi. Değere anahtarıyla ulaşılır: ogrenci["isim"].

C#
using System.Collections.Generic;

var ogrenci = new Dictionary<string, string>
{
    ["isim"] = "Ayşe",
    ["sehir"] = "İzmir"
};
Console.WriteLine(ogrenci["isim"]);

ogrenci["meslek"] = "Mühendis";
// Çıktı sırasını açıkça belirle
foreach (var anahtar in new[] { "isim", "sehir", "meslek" })
{
    Console.WriteLine($"{anahtar}: {ogrenci[anahtar]}");
}

▶ Sonuç

Ayşe
isim: Ayşe
sehir: İzmir
meslek: Mühendis

Adım adım neden böyle çalışıyor?

  1. ad ve puan farklı anlamdaki alanların anahtarlarıdır.
  2. ad alanı Elif değerini verir.
  3. puan alanının değeri 80’dir; örneğe göre sayı veya gösterim metni olarak tutulur.
  4. sehir olmadığı için açık bir yedek değer seçilir.
108

İkinci çözümlü örnek

Bir kaydı anahtar-değer ilişkisiyle temsil edip eksik alanı ele almak.

C#
using System;
using System.Collections.Generic;
class Program {
  static void Main() {
    var ogrenci = new Dictionary<string, string> {
      ["ad"] = "Elif", ["puan"] = "80"
    };
    Console.WriteLine(ogrenci["ad"]);
    Console.WriteLine(ogrenci["puan"]);
    Console.WriteLine(ogrenci.TryGetValue("sehir", out var sehir) ? sehir : "Belirtilmedi");
  }
}

▶ Sonuç

Elif
80
Belirtilmedi

Kolaydan zora sen dene

  1. Öğrencinin adını ve puanını değiştir.
  2. sehir alanını ekle; yedek yerine gerçek değerin döndüğünü kontrol et.
  3. Eksik alanın ekranda nasıl anlatılacağını düşün; sessizce yanlış bir şehir uydurmak yerine açık bir eksik bilgi mesajı yaz.
İpucunu aç

Önce bütün anahtarları yaz. Sonra bir anahtarı kaldırıp eksik bilgi yolunu dene.

Üç görevin açıklamalı çözümünü oku
  1. ad ve puan anahtarlarını aynı tutup değerlerini değiştir; sonraki okuma yeni değerleri göstermelidir.
  2. sehir anahtarına örneğin Ankara eklediğinde Belirtilmedi yerine Ankara okunmalıdır.
  3. Eksik alanda açık bir varsayılan veya hata yolu seç. Kullanıcının şehrini tahmin etme; bu örnekte Belirtilmedi mesajı güvenli ve anlaşılır bir sonuçtur.
Bir çözüm varyasyonu gör
208

Çözüm varyasyonu

Önce kendi görevlerini dene. Bu varyasyonda girdi ve sonuçları karşılaştır.

C#
using System;
using System.Collections.Generic;
class Program {
  static void Main() {
    var ogrenci = new Dictionary<string, string> {
      ["ad"] = "Deniz", ["puan"] = "95"
    };
    Console.WriteLine(ogrenci["ad"]);
    Console.WriteLine(ogrenci["puan"]);
    Console.WriteLine(ogrenci.TryGetValue("sehir", out var sehir) ? sehir : "Belirtilmedi");
  }
}

▶ Sonuç

Deniz
95
Belirtilmedi

Yaygın hata ve çözümü

  1. Anahtarı büyük/küçük harf farkıyla yazmak aynı alanı bulmayabilir; adlandırmayı tutarlı yap.
  2. Eksik alanı zorla var kabul etmek yerine dilin güvenli okuma veya varsayılan değer mekanizmasını kullan.

Kendini değerlendir

Bir sözlükte bilgiye nasıl ulaşılır?

Ezberlemeden açıklayabiliyor musun?

İki farklı öğrenci için aynı ad anahtarını tek sözlükte tekrar tekrar yazmak neden yetmez?

Açıklamalı yanıt

Aynı anahtarın değeri güncellenir. Birden çok öğrenci için kayıtları ayrı tutan bir koleksiyon gerekir.

Kendi çözümünde bir girdiyi değiştir. Çalıştırmadan önce beklenen sonucu yaz; gerçek sonuçla karşılaştır ve fark varsa hangi satırdan kaynaklandığını açıkla.

Kaynak ve çalışma ortamı

Örnekler küçük öğretim senaryolarıdır. Java/C#/PHP/Swift çalışma ortamını kendi cihazında ayrıca doğrula; yazılı sonuçlar beklenen davranışı açıklar.

Resmî dil belgeleri
Bu içerik işine yaradı mı?

Görüşünü aşağıdan işaretleyebilir ve varsa notunu bırakabilirsin.