Değiştirilebilir referans
- Rust kursu
- Başlangıç
- Ders 49/115
- 4 dk
&mut ile değiştirilebilir referans alırsın.
Değiştirilebilir referans
Ödünç alınan değeri değiştirmek için &mut kullanılır. Değişkenin kendisi de mut olmalıdır:
fn unlem_ekle(s: &mut String) {
s.push('!');
}
let mut selam = String::from("Merhaba");
unlem_ekle(&mut selam);
println!("{selam}"); // Merhaba!Sayılar gibi Copy türleri değiştirmek için referansı * ile çözersin: fn artir(n: &mut i32) { *n += 1; }.
Dışlayıcılık neden?
Bir değeri aynı anda iki yerden değiştirmek veri yarışına ve tutarsız duruma yol açar. Rust bunu derleme anında engeller:
let mut v = vec![1, 2];
let a = &mut v;
// let b = &mut v; // hata E0499: ikinci &mut
a.push(3);
println!("{:?}", v);Bu kural yalnızca referansların yaşadığı süre için geçerlidir; a son kez kullanıldıktan sonra yeni bir &mut alınabilir (non-lexical lifetimes).
Uygulama Sayaç artır
fn artir(n: &mut i32, adim: i32) fonksiyonu *n += adim yapsın. let mut sayac = 10; için iki kez artir(&mut sayac, 5) çağır ve sonucu yazdır.
Başlangıç kodu
fn main() {
// buraya yaz
}Örnek çözüm
fn artir(n: &mut i32, adim: i32) {
*n += adim;
}
fn main() {
let mut sayac = 10;
artir(&mut sayac, 5);
artir(&mut sayac, 5);
println!("{}", sayac);
}Beklenen çıktı
20
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Aynı anda kaç tane <code>&mut</code> referans olabilir?
- Hiç
- Bir Doğru cevap
- Sınırsız
- İki
Açıklama: Değiştirilebilir referans dışlayıcıdır (exclusive): aynı anda yalnızca bir tane olabilir ve o sırada başka hiçbir referans bulunamaz.
2 Değeri değiştir
fn ikiye_katla(n: &mut i32) {
____n *= 2;
}
fn ikiye_katla(n: &mut i32) {
*n *= 2;
}
Açıklama: *n referansı çözer; değişiklik asıl değişkene yazılır.
3 Kod ve sonuç
| Kavram | Anlamı |
|---|---|
&mut s |
Değiştirilebilir ödünç |
*n += 1 |
Çözüp değiştirir |
İki &mut aynı anda |
E0499 |
let s (mut yok) + &mut s |
Derleme hatası |