Hadi gelin, bu hatanın ne olduğunu, neden meydana geldiğini ve nasıl çözüleceğini adım adım keşfedelim.
Rust'ta Borrowing: Temel Kavramlar
Rust, immutable (değiştirilemez) ve mutable (değiştirilebilir) borçlar arasında ayrım yapar. Immutable borrow, verinin yalnızca okunmasına izin verirken, mutable borrow ise veri üzerinde değişiklik yapılmasına izin verir. Fakat, Rust çok katı kurallara sahiptir ve bu kurallara uymazsanız, bir hata alırsınız.
"Cannot Borrow Immutable Twice" Hatası Nedir?
Neden Böyle Bir Hata Alırsınız?
fn main() {
let x = String::from("Merhaba, Rust!");
let y = &x; // immutable borrow
let z = &x; // immutable borrow
println!("{}", y);
println!("{}", z);
}
Burada, `x` değişkenini iki kez immutable olarak ödünç almaya çalışıyorsunuz. Ancak Rust, aynı veriye aynı anda birden fazla immutable borç yapılmasına izin vermez. Çünkü, verinin aynı anda birden fazla yerde okunması, yanlışlıkla veri üzerinde değişiklik yapılmasını engellemek amacıyla yasaktır.
Hata Mesajı:
```
error[E0502]: cannot borrow `x` as immutable because it is also borrowed as immutable
```
Çözüm: Bu Hata Nasıl Düzeltilir?
# 1. Veriyi Mutable Olarak Ödünç Alın
Eğer birden fazla değişkeni aynı anda değiştirmeyi planlıyorsanız, bu durumda mutable borrow kullanabilirsiniz. Ancak unutmayın ki, bir veriye sadece bir kez mutable olarak ödünç alabilirsiniz.
fn main() {
let mut x = String::from("Merhaba, Rust!");
let y = &mut x; // mutable borrow
y.push_str(", Nasılsın?");
println!("{}", y);
}
Burada, veriyi bir kez mutable olarak ödünç aldık ve üzerinde değişiklik yapabildik.
# 2. Veriyi Tek Bir Kez Immutable Olarak Ödünç Alın
Diğer bir çözüm ise, veriyi yalnızca bir kez immutable olarak ödünç almanızdır. Birden fazla immutable borrow, veriyi aynı anda birden fazla yerde okumanızı sağlayabilir, ancak bu da hata verir.
fn main() {
let x = String::from("Merhaba, Rust!");
let y = &x; // immutable borrow
println!("{}", y);
}
Bu kodda, yalnızca tek bir immutable borrow yapıyoruz ve hatasız bir şekilde çalışıyor.
Sonuç: Rust'ta Hata Yapmak Normaldir, Önemli Olan Öğrenmek
Her ne kadar bu hata ilk başta kafa karıştırıcı olsa da, doğru şekilde çözümleyerek, Rust ile daha verimli bir şekilde çalışabilirsiniz. Şimdi, siz de kodunuzu tekrar gözden geçirin ve bellek güvenliğinizi daha sağlam temellere oturtun!