Hadi gelin, bu hatanın ne anlama geldiğine ve nasıl düzeltebileceğimize birlikte göz atalım.
Hata Ne Zaman Ortaya Çıkar?
Diyelim ki, bir değeri birden fazla yere, üstelik sadece okuma (immutable) amaçlı ödünç vermek istiyorsunuz. Rust, bu tür bir durumda size izin vermez. Çünkü aynı anda birden fazla yerde okuma yapmaya çalıştığınızda, veri yarışları ve bellek hataları ortaya çıkabilir. Rust, bellek yönetimi konusunda oldukça titizdir ve "cannot borrow immutable twice" hatasını vererek sizi uyarır.
Hata Örneği:
Şimdi, basit bir örnek üzerinden bu hatayı nasıl alacağımıza bakalım. Aşağıdaki kodda, bir değişkenin iki farklı yerde okuma (immutable) borçlanmaya çalışıyoruz:
fn main() {
let x = 5;
let y = &x; // x üzerinde immutable borçlanma
let z = &x; // x üzerinde başka bir immutable borçlanma (burada hata alırız)
println!("y: {}, z: {}", y, z);
}
Bu kodu çalıştırdığınızda, Rust size şu hatayı verecektir:
```
error[E0499]: cannot borrow `x` as immutable more than once at a time
```
Hatanın Sebebi Nedir?
Bu Hata Nasıl Çözülür?
1. Geçici Çözümler:
Eğer gerçekten iki farklı yerde aynı değeri kullanmak istiyorsanız, iki farklı borç istemi arasında küçük bir gecikme bırakabilirsiniz. Örneğin, ilk borç kullanıldıktan sonra bir süre sonra diğerine geçmek.
2. Mutable Borrow Kullanmak:
Eğer veriyi değiştirme gereksiniminiz varsa, bir `mutable` borçlanma yaparak bu sorunu çözebilirsiniz. Tabii ki, `mutable` borçlanma yalnızca tek bir yere yapılabilir. Bu, iki farklı okuma borcunun yerine tek bir yazma borcu sağlamak anlamına gelir.
Örneğin:
fn main() {
let mut x = 5;
let y = &mut x; // x üzerinde mutable borçlanma
*y += 1; // x'i değiştirme
println!("y: {}", y);
}
Bu şekilde, veriye yalnızca bir kez `mutable` borçlanarak değiştirme yapabiliriz. Ancak burada dikkat etmemiz gereken şey, sadece tek bir değişkenin aynı anda yazma (mutable) borcu olabileceğidir.
Rust'ın "Borrowing" Felsefesi
Sonuç
Unutmayın, Rust dilinde hata yapmadığınızda gerçekten "güvenli" bir yazılım yazıyorsunuz. Eğer bu hatayı alırsanız, sadece biraz daha dikkat etmeniz gerektiğini hatırlayın!