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() yöntemi, bir anahtar 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, ya "bir şey" ya da "hiçbir şey"i temsil eden yerleşik bir Rust türü olan Option türünü döndürür. Bunun sebebi, aradığınız anahtarın hash map'te bulunmayabilecek olmasıdır.

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

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

Match kolunun açık bir & olmadan Some(capital) kullandığını fark edebilirsiniz. Bunun nedeni, Rust'ın bu bağlamda referansı sizin için otomatik olarak işlemesidir — capital hala değere bir referans tutar, ancak desende açıkça & yazmanıza gerek yoktur. Rust'ın desen eşlemesi, örneğin yazdırırken capital değişkenini doğrudan kullanmanıza izin verecek kadar akıllıdır.

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 (tür String) ve başkentlerini değer (tür String) 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 almak 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 işleyecektir, böylece capital değişkenini doğrudan yazdırma ifadenizde kullanabilirsiniz.

Gereksinimler:

  • std::collections modülünden HashMap yapısını 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şkenti hash map'e ekleyin
  • Üçüncü girdiyi aranacak ülke olarak okuyun
  • Aranan ülkenin başkentini getirmek için .get() metodunu kullanın
  • .get() tarafından döndürülen Option değerini 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

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