Hata Neden Ortaya Çıkar?
Rust, aynı anda birden fazla yerden veri okumanıza izin verir, ancak aynı anda bir veriyi hem mutable (değiştirilebilir) hem de immutable (değiştirilemez) olarak ödünç almanıza asla izin vermez. Çünkü bu durum, verinin beklenmedik bir şekilde değiştirilmesine yol açabilir.
Diyelim ki, bir fonksiyona bir değişkeni iki kez immutable olarak geçiriyorsunuz. Rust, bunun veri yarışına neden olabileceğini ve potansiyel olarak hatalara yol açabileceğini fark eder. Bu yüzden, aynı anda birden fazla immutable referansı kabul etmez.
“Cannot Borrow Immutable Twice” Hatasını Çözme Yöntemi
# 1. Birden Fazla Immutable Referansı Kaldırın
Eğer mümkünse, aynı veriye birden fazla immutable referansı aynı anda kullanmaktan kaçının. Bunun yerine, sadece bir kez immutable referans kullanmak en iyi seçenek olacaktır.
fn main() {
let x = 5;
let y = &x;
let z = &x; // Burada ikinci bir immutable referans alınıyor.
println!("y: {}", y);
println!("z: {}", z); // Hata burada ortaya çıkıyor.
}
Bu durumda, `y` ve `z` aynı veriye iki kez immutable referans alır ve bu, Rust tarafından bir hata olarak tespit edilir. Bunun yerine, yalnızca bir referans kullanabilirsiniz.
# 2. Immutable ve Mutable Referansları Ayırın
Eğer gerçekten bir mutable referans kullanmak istiyorsanız, immutable referanslarınızı geçici olarak bırakabilir veya geçerli kullanımda veri üzerinde bir değişiklik yapmadığınızdan emin olabilirsiniz.
fn main() {
let mut x = 5;
let y = &x;
let z = &mut x; // Burada mutable referans kullanıyoruz, bu hataya yol açar.
println!("y: {}", y);
*z = 10; // Hata oluşmamak için burada dikkatli olunmalı.
}
Bu kodda, bir yanda immutable referans (`y`) ve diğer yanda mutable referans (`z`) kullanmak isteniyor. Ancak, Rust her ikisini de aynı anda ödünç alamaz. Çözüm olarak, immutable referansı kullanmaya devam ederken, mutable referansı kullanmadan önce tüm diğer referansların bitmesini beklemek gerekiyor.
Rust’ta Borçlanma Kuralları
- Immutable referanslar yalnızca read-only (sadece okuma) erişim sağlar.
- Mutable referanslar veri üzerinde değişiklik yapmanıza olanak tanır, ancak yalnızca tek bir mutable referans olmalıdır.
- Aynı anda hem immutable hem de mutable referans kullanmak yasaktır.
Rust, bu kurallarla bellek güvenliğini garanti altına alır. Bu kuralları anladığınızda, bu tarz hataları çok daha kolay çözebilirsiniz.
Sonuç
Umarım bu yazı, bu hata mesajının ne anlama geldiğini anlamanızı sağlar ve onu düzeltme konusunda yardımcı olur. Rust’un güçlü bellek güvenliği modelini ve borçlanma kurallarını öğrenmek, daha güvenli ve etkili kodlar yazmanızı sağlayacaktır.