CodeBlanks Logo Icon CodeBlanks

Referanslar

& işleciyle referans oluşturmayı öğrenirsin.

Referanslar

Referans (&), bir değere sahipliğini almadan erişmeyi sağlar; buna ödünç alma (borrowing) denir. Referans kapsamdan çıkınca hiçbir şey bırakılmaz çünkü değerin sahibi değildir:

fn uzunluk(s: &String) -> usize {
    s.len()
}

let ad = String::from("Ada");
let n = uzunluk(&ad);     // ödünç verildi
println!("{ad} {n}");     // ad hâlâ geçerli

Varsayılan referanslar değiştirilemezdir; ödünç alınan değer okunabilir ama değiştirilemez.

Çoklu okuyucu

Aynı anda istediğin kadar değiştirilemez referans olabilir; hepsi değeri güvenle okur:

let s = String::from("rust");
let r1 = &s;
let r2 = &s;
println!("{r1} {r2} {}", r1.len());

Referanslar otomatik çözülür (auto-deref): r1.len() yazmak (*r1).len() ile aynıdır. Açıkça çözmek için * kullanılır: let n = 5; let r = &n; println!("{}", *r + 1);.

Uygulama Sesli harf say

fn sesli(s: &str) -> usize fonksiyonu "aeıioöuü" içindeki harfleri saysın (chars().filter(...).count()). let k = String::from("programlama"); için sesli(&k) çağırıp hem k'yi hem sonucu yazdır.

Başlangıç kodu

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

Örnek çözüm

main.rs
fn sesli(s: &str) -> usize {
    s.chars().filter(|c| "aeıioöuü".contains(*c)).count()
}

fn main() {
    let k = String::from("programlama");
    let n = sesli(&k);
    println!("{} {}", k, n);
}

Beklenen çıktı

programlama 4

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 <code>fn f(s: &amp;String) { s.push('!'); }</code> neden derlenmez?

  • ! geçersiz char
  • Derlenir
  • &String değiştirilemez bir referanstır; &mut String gerekir Doğru cevap
  • push String'de yoktur

Açıklama: Değiştirmek için hem değişkenin mut olması hem de &mut referans verilmesi gerekir.

2 Ödünç ver

Soru
let ad = String::from("Ada");
let n = uzunluk(____ad);
Cevap
let ad = String::from("Ada");
let n = uzunluk(&ad);

Açıklama: & değerin referansını oluşturur; sahiplik devredilmez.

3 İfade ve anlamı

Kavram Anlamı
&s Değiştirilemez referans
*r Referansı çözme
r.len() Otomatik çözme
fn f(s: &String) Ödünç alan fonksiyon

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