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.
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::collectionsiçerisindenHashMap'i içe aktarınHashMap<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ülenOption'ı işlemek içinmatchkullanı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,
FranceveyaGermany)
Çı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:
Nonedö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
}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
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 Bulma