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.

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
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"].
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?
- ad ve puan farklı anlamdaki alanların anahtarlarıdır.
- ad alanı Elif değerini verir.
- puan alanının değeri 80’dir; örneğe göre sayı veya gösterim metni olarak tutulur.
- sehir olmadığı için açık bir yedek değer seçilir.
İkinci çözümlü örnek
Bir kaydı anahtar-değer ilişkisiyle temsil edip eksik alanı ele almak.
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
- Öğrencinin adını ve puanını değiştir.
- sehir alanını ekle; yedek yerine gerçek değerin döndüğünü kontrol et.
- 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
- ad ve puan anahtarlarını aynı tutup değerlerini değiştir; sonraki okuma yeni değerleri göstermelidir.
- sehir anahtarına örneğin Ankara eklediğinde Belirtilmedi yerine Ankara okunmalıdır.
- 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
Çözüm varyasyonu
Önce kendi görevlerini dene. Bu varyasyonda girdi ve sonuçları karşılaştır.
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ü
- Anahtarı büyük/küçük harf farkıyla yazmak aynı alanı bulmayabilir; adlandırmayı tutarlı yap.
- Eksik alanı zorla var kabul etmek yerine dilin güvenli okuma veya varsayılan değer mekanizmasını kullan.
Kendini değerlendir
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 belgeleriBu içerik işine yaradı mı?
Görüşünü aşağıdan işaretleyebilir ve varsa notunu bırakabilirsin.