CodeBlanks Logo Icon CodeBlanks

Özet - Ödünç alma

& 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

main.rs
fn main() {
    // buraya yaz
}

Örnek çözüm

main.rs
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ç

Soru
let mut liste = vec![1];
ekle(____ liste);
Cevap
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

Başlangıç bölümündeki tüm dersler

16 Proje: Yapılacaklar listesi

  1. Görev modeli
  2. Ekleme
  3. Listeleme
  4. İşaretleme
  5. Komut okuma