Rust'ta Ownership ve Borrowing Nedir?
Ancak, bazen verinin sahibi olmadan sadece bir değişkene geçici olarak erişmek isteyebilirsiniz. İşte burada *borrowing* devreye girer. Borrowing, bir değişkenin sahipliğini devretmeden ona erişmenizi sağlar. Ancak burada dikkat edilmesi gereken birkaç önemli nokta vardır: Rust, veriyi borç aldığınızda, verinin aynı anda birden fazla yerde kullanılmasını engeller.
Yaygın Ownership ve Borrowing Hataları
Rust, sahipliği devraldığınızda, ilk değişkeni kullanmanıza izin vermez. Bu, bellek güvenliğini korumak için yapılır. Ancak bu bazen yeni başlayanlar için kafa karıştırıcı olabilir.
Örnek bir hata mesajı şu şekilde olabilir:
```
error[E0382]: use of moved value: `x`
```
Bu hata, verinin sahipliğinin bir fonksiyona aktarılması ve ardından eski değişkenin kullanılmaya çalışılması sonucu oluşur. Rust, eski değişkeni artık geçerli kabul etmez çünkü sahiplik başka bir değişkene geçmiştir.
İşte basit bir örnek:
fn main() {
let x = String::from("Rust"); // x, String'in sahibi
let y = x; // x'in sahipliği y'ye geçiyor
println!("{}", x); // Hata! x artık geçerli değil
}
Bu hatayı çözmek için, ya `x`'in sahipliğini `y`'ye aktarmazsınız ya da `x`'i klonlayarak bir kopyasını oluşturursunuz:
fn main() {
let x = String::from("Rust");
let y = x.clone(); // x'i klonladık, bu sayede x hala geçerli
println!("{}", x); // Artık x kullanılabilir
}
# 2. Borrowing Hatası: Mutable ve Immutable Borrows Çakışması
Bir değişkeni hem mutable hem de immutable olarak borç almak şu hata mesajını almanıza neden olur:
```
error[E0502]: cannot borrow `x` as mutable because it is also borrowed as immutable
```
Örneğin:
fn main() {
let mut x = 5;
let y = &x; // Immutable borç
let z = &mut x; // Mutable borç, burada hata alırsınız!
println!("{}", y);
}
Bu hatayı düzeltmek için, ya tüm borçları aynı türde (ya tamamen immutable ya da tamamen mutable) yapmalısınız ya da borçları doğru sırayla almalısınız.
fn main() {
let mut x = 5;
let y = &x; // Immutable borç
println!("{}", y); // İlk borç kullanımında sorun yok
let z = &mut x; // Mutable borç, şimdi geçerli
}
Rust Hatalarını Anlamak
Rust ile çalışırken hataların kaçınılmaz olduğunu unutmamalısınız. Bu hatalar, dilin güçlü bellek güvenliği özelliklerinin bir sonucudur. Zamanla, *ownership* ve *borrowing* gibi kavramları daha iyi anlayacak ve bu hataları daha kolay çözeceksiniz.