Rust'ta Ownership Nedir?
Örneğin, bir fonksiyona bir değişken gönderdiğinizde, Rust derleyicisi, bu verinin fonksiyona taşındığını (mülkiyetin verildiğini) kabul eder. Bu da demek oluyor ki, orijinal değişkenin veriye artık erişimi olmayacak. İşte burada "Ownership Borrowing Error" hatası devreye girer.
Ownership Borrowing Error: Sebep ve Çözüm
İşte bu hatayla karşılaşılan basit bir örnek:
fn main() {
let s = String::from("Merhaba, Rust!");
let borrowed = &s; // s üzerinde bir referans alındı.
println!("{}", s); // s hala burada kullanılmakta
let moved = s; // Burada s taşındı!
// Bu satırda, s'nin iki kez kullanımı yüzünden hata alırız.
println!("{}", borrowed); // borrowed artık geçerli değil çünkü s taşındı.
}
Bu kodda, `s` değişkeni önce borrow edilir, sonra move edilir. Rust, aynı veri üzerinde hem borrow hem de move işleminin yapılmasına izin vermez, çünkü bu durumda veri üzerinde iki farklı referans olacaktır. Bu, bellek güvenliği açısından bir sorun yaratır.
Hata Mesajını Anlamak
```
error[E0382]: use of moved value: `s`
```
Bu hata mesajı, `s` değişkeninin taşındığını ve artık geçerli bir referans olmadığını belirtir. Rust, taşınan veriye erişimi engeller, çünkü o verinin artık başka bir yerde kullanım hakkı vardır.
Hata Çözümü
İşte bu hatanın çözülmüş hali:
fn main() {
let s = String::from("Merhaba, Rust!");
let borrowed = &s; // s üzerinde bir referans alındı.
println!("{}", s); // s hala burada kullanılmakta
let moved = s.clone(); // s'nin bir kopyası alındı, böylece s'nin kendisi hala kullanılabilir.
println!("{}", borrowed); // borrowed hala geçerli
println!("{}", moved); // moved da geçerli çünkü kopyalandı.
}
Bu çözümde, `s.clone()` kullanarak `s`'nin bir kopyasını alıyoruz. Böylece, orijinal `s` üzerinde hâlâ işlem yapabilirken, kopyası üzerinde de işlem yapabiliyoruz. Rust, her iki referansı da güvenli bir şekilde yönetebilir.
Sonuç
Rust'ta hataların üstesinden gelmek, dilin sunduğu güvenlik özelliklerini tam olarak kullanmanıza yardımcı olacaktır. Bu hataların üstesinden geldikçe, Rust ile yazılım geliştirme becerilerinizi daha da geliştirebilir ve daha güvenli kodlar yazabilirsiniz.