Menu
Coddy logo textTech

Değerlere Erişme

Coddy'nin Rust Journey'sinin Logic & Flow bölümünün bir parçası — ders 30 / 66.

Verilerinizi hash map'inizde sakladıktan sonra, onları geri almanın bir yoluna ihtiyacınız olacak. .get() metodu, anahtarını kullanarak bir değeri aramanıza olanak tanır:

let value = my_map.get("some_key");

Ancak, anlaşılması gereken önemli bir detay var: .get() değeri doğrudan döndürmez. Bunun yerine, bir değerin mevcut olduğunu (Some) veya mevcut olmadığını (None) temsil eden yerleşik bir Rust türü olan Option türünü döndürür. Bunun nedeni, aradığınız anahtarın hash map içinde bulunmama ihtimalidir.

Anahtar mevcut olduğunda, .get() metodu Some(&value) döndürür - & sembolüne dikkat edin, bu değere bir referans aldığınız anlamına gelir. Anahtar mevcut olmadığında ise None döndürür:

match capitals.get("France") {
    Some(capital) => println!("The capital is {}", capital),
    None => println!("Country not found"),
}

Some(capital) eşleşme kolunda, Rust referansı sizin için otomatik olarak yönetir — buradaki capital içteki referans verilen değere bağlanır, bu nedenle desende açıkça & yazmanıza gerek yoktur.

Bu tasarım, var olmayan bir anahtara erişmeye çalıştığınızda programınızın çökmesini önler. Bir hataya neden olmak yerine Rust, sizi her iki olasılığı da —değeri bulma veya bulamama— ele almaya zorlayarak kodunuzu daha sağlam ve öngörülebilir hale getirir.

challenge icon

Görev

Kolay

İki girdi alacaksınız: bir ülke adı ve bir başkent adı. Ülke adlarını anahtar (String türünde) ve başkentlerini değer (String türünde) olarak saklayan bir hash map oluşturun. Ülkeyi ve başkentini hash map'e ekleyin. Ardından, aramak için başka bir ülke adını içeren üçüncü bir girdi alacaksınız. Bu ülkenin başkentini getirmek için .get() metodunu kullanın ve her iki durumu da ele alın: ülkenin haritada mevcut olduğu durum ve mevcut olmadığı durum.

Not: .get() bir Option döndürür — anahtar mevcut olduğunda Some(&value) (değere bir referans) veya mevcut olmadığında None. Bir match kolunda Some(capital) yazabilirsiniz ve Rust referansı sizin için otomatik olarak yönetecektir, böylece capital değişkenini doğrudan yazdırma ifadenizde kullanabilirsiniz.

Gereksinimler:

  • std::collections içerisinden HashMap'i içe aktarın
  • HashMap<String, String> türlerinde değiştirilebilir (mutable) bir hash map oluşturun
  • İlk girdiyi ülke adı olarak okuyun
  • İkinci girdiyi başkent adı olarak okuyun
  • Ülkeyi ve başkentini hash map'e ekleyin
  • Üçüncü girdiyi aranacak ülke olarak okuyun
  • Aranan ülkenin başkentini getirmek için .get() kullanın
  • .get() tarafından döndürülen Option'ı işlemek için match kullanın
  • Eğer ülke bulunursa, şunu yazdırın: The capital of [country] is [capital]
  • Eğer ülke bulunamazsa, şunu yazdırın: [country] not found in the map

Girdi:

  • İlk satır: Eklenecek ülke adı (örneğin, France)
  • İkinci satır: Başkent adı (örneğin, Paris)
  • Üçüncü satır: Aranacak ülke adı (örneğin, France veya Germany)

Çıktı:

  • Eğer aranan ülke mevcutsa: The capital of [country] is [capital]
  • Eğer aranan ülke mevcut değilse: [country] not found in the map

Kopya kağıdı

.get() metodu, anahtarını kullanarak bir hash map'ten bir değer alır:

let value = my_map.get("some_key");

.get() metodu bir Option türü döndürür çünkü anahtar hash map'te mevcut olmayabilir:

  • Anahtar mevcut olduğunda: Some(&value) (değere bir referans) döndürür
  • Anahtar mevcut olmadığında: None döndürür

Her iki durumu da ele almak için match kullanın:

match capitals.get("France") {
    Some(capital) => println!("The capital is {}", capital),
    None => println!("Country not found"),
}

Bu tasarım, sizi her iki olasılığı da ele almaya zorlayarak, var olmayan anahtarlara erişirken çökmeleri önler.

Kendin dene

use std::collections::HashMap;
use std::io;

fn main() {
    // Eklenecek ülke adını oku
    let mut country = String::new();
    io::stdin().read_line(&mut country).expect("Failed to read line");
    let country = country.trim().to_string();
    
    // Başkent adını oku
    let mut capital = String::new();
    io::stdin().read_line(&mut capital).expect("Failed to read line");
    let capital = capital.trim().to_string();
    
    // Aranacak ülke adını oku
    let mut lookup_country = String::new();
    io::stdin().read_line(&mut lookup_country).expect("Failed to read line");
    let lookup_country = lookup_country.trim().to_string();
    
    // TODO: Kodunuzu aşağıya yazın
    // Bir HashMap oluşturun, ülkeyi ve başkenti ekleyin, ardından ülkeyi arayın
    
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Logic & Flow bölümündeki tüm dersler