Değerlere Erişme
Coddy'nin Rust Journey'sinin Mantık & Akış bölümünün bir parçası. Ders 30 / 66.
Hash map'inizde veriler depolandığında, onları almak için bir yönteme ihtiyacınız olacaktır. .get() yöntemi, anahtarını kullanarak bir değeri aramanızı sağlar:
let value = my_map.get("some_key");Ancak anlaşılması gereken önemli bir ayrıntı var: .get() doğrudan değeri döndürmez. Bunun yerine, “bir şey” veya “hiçbir şey”i 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 bulunmayabilmesidir.
Anahtar mevcut olduğunda .get(), Some(&value) döndürür — değerinin kendisini değil, değere bir başvuru aldığınız anlamına gelen & sembolüne dikkat edin. 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"),
}Eşleşme kolunun açıkça bir & kullanmadan Some(capital) kullandığını fark edebilirsiniz. Bunun nedeni, Rust’ın bu bağlamda başvuruyu sizin için otomatik olarak işlemesidir: capital hâlâ değere bir başvuru tutar, ancak kalıpta & işlecini açıkça yazmanız gerekmez. Rust’ın kalıp eşleştirmesi, örneğin yazdırırken capital öğesini 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. Rust, bir hataya neden olmak yerine sizi her iki olasılığı da ele almaya zorlar: değeri bulmak veya bulamamak. Böylece kodunuz daha sağlam ve öngörülebilir olur.
Görev
Kolayİki girdi alacaksın: bir ülke adı ve bir başkent adı. Ülke adlarını anahtar (tür String), başkent adlarını ise değer (tür String) olarak depolayan bir hash map oluştur. Ülkeyi ve başkentini hash map'e ekle. Ardından, aramak üzere başka bir ülke adı içeren üçüncü bir girdi alacaksın. Bu ülkenin başkentini almak için .get() metodunu kullan ve her iki durumu da ele al: ülkenin map'te bulunduğu ve bulunmadığı durumlar.
Not: .get(), anahtar mevcut olduğunda Some(&value) (değere bir referans), mevcut olmadığında ise None olmak üzere bir Option döndürür. Bir match kolunda Some(capital) yazabilirsin; Rust referansı senin için otomatik olarak ele alır, böylece yazdırma ifaden içinde capital değerini doğrudan kullanabilirsin.
Gereksinimler:
HashMap'istd::collectionsüzerinden içe aktarHashMap<String, String>türlerine sahip değiştirilebilir bir hash map oluştur- İlk girdiyi ülke adı olarak oku
- İkinci girdiyi başkent adı olarak oku
- Ülkeyi ve başkenti hash map'e ekle
- Üçüncü girdiyi aranacak ülke olarak oku
- Aranan ülkenin başkentini almak için
.get()kullan .get()tarafından döndürülenOption'ı ele almak içinmatchkullan- Ülke bulunursa şunu yazdır:
The capital of [country] is [capital] - Ülke bulunamazsa şunu yazdır:
[country] not found in the map
Girdi:
- İlk satır: Eklenecek ülke adı (ör.
France) - İkinci satır: Başkent adı (ör.
Paris) - Üçüncü satır: Aranacak ülke adı (ör.
FranceveyaGermany)
Çıktı:
- Aranan ülke mevcutsa:
The capital of [country] is [capital] - 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
}Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Mantık & Akış bölümündeki tüm dersler
1İleri Seviye Kontrol Akışı
'match' İfadesiBirden Çok Değeri EşleştirmeAralıkları Eşleştirme'if let' İfadesiİfade Olarak DöngülerÖzet - Basit Komut Ayrıştırıcı4Struct'lar ile Verileri Gruplama
Struct Nedir?Struct'lara Genel BakışStruct Alanlarına ErişmeMutable Struct'larFonksiyon Parametresi Olarak Struct'larTuple Struct'larÖzet - Bir Kitap Struct'ı Oluşturun7'Result' ile Hata Yönetimi
'Result' Nedir?'Result' ile 'match' Kullanımıis_ok() ve is_err()Kısayollar: unwrap ve expectSoru İşareti Operatörü '?'String'leri Sayılara DönüştürmeÖzet - Güvenli Bölme Fonksiyonu10Closures ve Anonim Fonksiyonlar
Closure Nedir?Basit Bir Closure TanımlamaParametreli Closure'larOrtamı YakalamakÖzet - Basit Toplayıcı Closure2Vektörlere Giriş
Vektör Nedir?Vektör Oluşturmapush ile Eleman EklemeVektör Elemanlarına ErişmeVektör Üzerinde YinelemeDeğiştirilebilir YinelemeEleman KaldırmaÖzet - Temel Skor Takipçisi5Hash Map'ler ile Anahtar-Değer Çiftleri
Hash Map Nedir?Bir Hash Map OluşturmaAnahtar-Değer Çiftleri EklemeDeğerlere ErişmeBir Hash Map Üzerinde GezinmeBir Değeri GüncellemeBir Çifti KaldırmaÖzet - Kelime Sayacı11Son Meydan Okumalar
Özet - Benzersiz ÖğelerÖzet - Kullanıcı Profili DoğrulayıcıÖzet - Not Özetleyici3Komut Satırı Yapılacaklar Listesi
Proje KurulumuGörev EklemeTüm Görevleri GörüntülemeGörev SilmeFinal Kodu6'Option' ile Yokluğu Yönetme
'Option' Nedir?'Option' ile 'match' Kullanımıis_some() ve is_none()Bir 'Option' Değerini Açmak (Unwrapping)expect MetoduVarsayılan Değer Sağlama: unwrap_orÖzet - Bir Eleman Bulma9String Dilimleri ve Daha Fazlası
String ve &strString Dilimleri OluşturmaFonksiyon Parametresi Olarak DilimlerDiğer DilimlerÖzet - İlk Kelimeyi BulmaKendi başına pratik yap: Online Rust derleyicisi