Haydi, bu iki kavramın işleyişini anlamaya çalışalım ve karşınıza çıkabilecek hataları nasıl çözebileceğinizi öğrenelim!
Ownership: Rust'ın Temel Prensibi
Ancak, sahiplik kuralları bazen zorlayıcı olabilir. Mesela bir veri parçası bir fonksiyona geçmeden önce sahipliği bir başka yere devretmeniz gerekebilir. Eğer aynı veri parçası birden fazla yerde aynı anda kullanılırsa, Rust bunu derleme hatası olarak size bildirir. Bu hatalar genellikle şu şekilde karşımıza çıkar:
```rust
fn main() {
let s = String::from("Merhaba, Rust!");
let s2 = s; // s'nin sahipliği s2'ye devredildi
println!("{}", s); // Hata: s kullanılamaz
}
```
Bu kod, bir ownership hatası oluşturur çünkü `s`'nin sahipliği `s2`'ye devredildikten sonra, `s` değişkeni artık geçerli değildir. Rust bunu derleme zamanında size bildirir ve bu, sahiplik kurallarını doğru şekilde anlamadığınız anlamına gelir.
Borrowing: Rust'ın Büyüleyici Düzenlemeleri
Örneğin:
```rust
fn main() {
let s = String::from("Merhaba, Rust!");
let r1 = &s; // immutable borrow
let r2 = &s; // başka bir immutable borrow
println!("{}, {}", r1, r2); // Hata yok, çünkü sadece okuma yapıyoruz
}
```
Ancak, aynı anda hem mutable hem de immutable borrows kullanmak yasaktır. Bu, veri güvenliğini sağlamaya yönelik bir önlem olarak karşımıza çıkar. Aşağıdaki kodda olduğu gibi, bir veri üzerinde aynı anda hem değişiklik yapmaya çalışmak hem de başka bir yerde okuma yapmak hataya yol açar:
```rust
fn main() {
let mut s = String::from("Merhaba, Rust!");
let r1 = &s; // immutable borrow
let r2 = &mut s; // mutable borrow, burada hata alırsınız
println!("{}, {}", r1, r2); // Hata: mutable ve immutable borrow aynı anda yapılamaz
}
```
Bu hata, Rust’ın bellek güvenliğini sağlama amacının bir sonucudur. Aynı anda bir veriye hem mutable hem de immutable erişim yapmanın, olası veri yarışlarına ve bellek hatalarına yol açabileceği için Rust bunu engeller.
Ownership ve Borrowing Hatalarının Çözümü
Rust, bu hataları genellikle derleme zamanında gösterir, bu da geliştiricilerin hata yapmalarını zorlaştıran bir özelliktir. Ancak bazen bu hatalar ilk başta kafa karıştırıcı olabilir. İşte bu yüzden, adım adım ilerleyerek her bir hatayı dikkatlice inceleyin ve problemi çözmek için ownership ve borrowing kurallarını dikkatlice gözden geçirin.
Sonuç
Unutmayın, her hata bir öğrenme fırsatıdır ve her defasında bir adım daha ileri gitmenize yardımcı olur!