Ownership: Sahiplik Sistemi Nedir?
Rust’ta bir değişken, veriyi *sahiplenir*. Ancak bu sahiplik, verinin bir anda yalnızca bir yerde olmasını zorunlu kılar. Sahiplik başka bir değişkene devredildiğinde, eski değişken veriye erişemez.
Borrowing: Ödünç Verme
Ama dikkat! Aynı anda hem immutable hem de mutable ödünç alma işlemi yapamazsınız. Bu kural, verinin tutarsız bir şekilde değiştirilmesini önler.
Common Ownership & Borrowing Errors (Sık Karşılaşılan Hatalar)
# 1. “Ownership has been moved” Hatası
Örnek:
fn main() {
let s1 = String::from("Merhaba, Rust!");
let s2 = s1; // s1’ın sahipliği s2’ye taşındı
println!("{}", s1); // Hata! s1 artık geçersiz
}
Bu örnekte, `s1` değişkeni, `s2`'ye sahipliği devrettiği için `s1`'i kullanmaya çalışmak hata verecektir. Rust, sahiplik devrini önlemek için buna müdahale eder.
Çözüm: Bu hatayı önlemek için, veriyi `clone` ederek kopyalayabilirsiniz:
fn main() {
let s1 = String::from("Merhaba, Rust!");
let s2 = s1.clone(); // s1’in bir kopyası s2’ye verildi
println!("{}", s1); // Artık s1 geçerli
}
# 2. "Cannot borrow `x` as mutable" Hatası
Örnek:
fn main() {
let mut x = 10;
let y = &x; // Immutable borrows
let z = &mut x; // Mutable borrow, ama hata verir çünkü y immutable olarak ödünç almıştı
}
Bu kodda, `y` değişkeni `x`'in bir immutable ödünç almasıdır. Ardından, `z` değişkeniyle `x` üzerinde değişiklik yapmaya çalışıyoruz. Bu durum, Rust tarafından engellenir.
Çözüm: Bu hatayı düzeltmek için ya immutable referanslardan birini kaldırabilir ya da sadece mutable referans kullanabilirsiniz.
# 3. “Cannot borrow `x` as mutable more than once at a time” Hatası
Örnek:
fn main() {
let mut a = 5;
let b = &mut a;
let c = &mut a; // Hata! a üzerinde iki tane mutable referans var
}
Bu örnekte, `a` değişkeni üzerinde iki kez mutable ödünç alma işlemi yapmaya çalışıyoruz. Rust, bunun bellek tutarsızlıklarına yol açabileceğini bildiği için bu durumu engeller.
Çözüm: Aynı anda birden fazla mutable ödünç alma işleminden kaçınmalısınız.
Rust'ta Hata Çözme İpuçları
- Veri Kopyalama ve Sahiplik Devri: Eğer veriye ihtiyaç duyduğunuz yerlerde birden fazla değişken varsa, sahiplik devri yerine kopyalamayı (örneğin `clone` kullanarak) tercih edebilirsiniz.
- Borrowing Kurallarını Hatırlayın: Hem mutable hem de immutable ödünç almayı aynı anda yapmamaya özen gösterin. Bu kurallara dikkat etmek, hata almanızı engeller.
Sonuç: Rust'ta Sahiplik ve Borrowing Hatalarına Dair Son Söz
Unutma, her hata bir öğrenme fırsatıdır. Rust’ın hata mesajlarını doğru okuyarak, bu dilde daha ustalaşabilirsin!