Referanslar
- Rust kursu
- Başlangıç
- Ders 48/115
- 4 dk
& 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çerliVarsayı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
fn main() {
// buraya yaz
}Örnek çözüm
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: &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
let ad = String::from("Ada");
let n = uzunluk(____ad);
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 |