Özet - Ödünç alma
- Rust kursu
- Başlangıç
- Ders 53/115
- 5 dk
& ve &mut referanslarıyla bir sayaç artıran fonksiyon yazarsın.
Ödünç alma özeti
&T sahipliği almadan okur; &mut T değiştirir (değişken mut olmalı). Kural: aynı anda ya birçok &T ya da tek bir &mut T. Referans gösterdiği değerden uzun yaşayamaz. Fonksiyon imzaları niyeti söyler: T tüketir, &T/&[T]/&str okur, &mut T değiştirir.
Ödünç alma alışkanlıkları
Pratik kurallar: parametrelerde mümkün olan en zayıf erişimi iste (&str > &String > String); referansları kısa ömürlü tut; borrow checker hatası aldığında önce kopyalanabilecek küçük bir değer olup olmadığına, sonra işlemlerin sırasını değiştirmeye bak. .clone() son çaredir ama küçük değerlerde sorun değildir.
Uygulama En uzun kelime
fn en_uzun(kelimeler: &[&str]) -> usize yaz; en uzun kelimenin karakter sayısını döndürsün (chars().count() ve max). ["go", "rust", "çiçekçi"] için sonucu yazdır.
Başlangıç kodu
fn main() {
// buraya yaz
}Örnek çözüm
fn en_uzun(kelimeler: &[&str]) -> usize {
kelimeler.iter().map(|k| k.chars().count()).max().unwrap_or(0)
}
fn main() {
println!("{}", en_uzun(&["go", "rust", "çiçekçi"]));
}Beklenen çıktı
7
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Bu kodun hangisi derlenir?
- Hiçbiri
- let mut s = String::new(); let r = &mut s; r.push('a'); println!("{s}"); Doğru cevap
- let mut s = String::new(); let r = &mut s; println!("{s}"); r.push('a');
- let s = String::new(); let r = &mut s;
Açıklama: İlkinde r son kez push'ta kullanılır, sonra s okunur; ikincisinde r hâlâ kullanılacakken s okunuyor (E0502); üçüncüde s mut değil.
2 Değiştirilebilir ödünç
let mut liste = vec![1];
ekle(____ liste);
let mut liste = vec![1];
ekle(&mut liste);
Açıklama: Fonksiyon listeyi değiştireceği için &mut liste verilir.
3 Grubun özeti
| Kavram | Anlamı |
|---|---|
&T |
Paylaşılan okuma |
&mut T |
Dışlayıcı yazma |
Borrow checker |
Kuralları denetler |
Ömür |
Referans değeri aşamaz |