Rust : Değişkenler ve Değişebilirlik

Rust‘ta varsayılan (default) olarak değişkenler (variables) değer atandıktan sonra değiştirilemezler (immutable). Rust, kodunuzu Rust‘ın sağladığı güvenlikten yararlanacak şekilde yazmanızı sağlar. Aşağıdaki kodu çalıştırdığınızda değişmeyen değişkene ( immutable variable) ikinci defa değer atamaya çalıştığınız için şu hatayı alırsınız : cannot assign twice to immutable variable

fn main() {
    let x = 5;
    println!("The value of x is: {x}");
    x = 6;
    println!("The value of x is: {x}");
}

Değikenin tanımlandıktan sonra tasarımınızda tanımlanmamış bir şekilde başka bir kod parçası tarafından değiştirilmesi hataya yol açabileceği için Rust bilinçli bir şekilde değiştirmeyecekseniz tüm değişkenleri değitirilemez olarak tanımlar. Eğer siz değişkene ikinci bir atama yapmak istiyorsanız. Değişkenleri mut anahtar kelimesi ile tanımlamalısınız. Aşağıdaki örnekteki kod değişkene ikinci atamayı yaptığımızda bile sorunsuz çalışacaktır.

fn main() {
    let mut x = 5;
    println!("The value of x is: {x}");
    x = 6;
    println!("The value of x is: {x}");
}

Rust’ ta sabit (constant) tanımlamak için bir çok dilde olduğu gibi const anahtar kelimesi kullanılır, mut anahtar kelimesini kullanmanıza izin vermez.. const ile tanımlanan değişkenler hiç bir zaman değiştirilemezler. Sabitler Rust isimlendirme kuralına (naming convention) aşağıdaki gibi hepsi büyük harf olacak şekilde tanımlanır.

const THREE_HOURS_IN_SECONDS: u32 = 60 * 60 * 3;

Rust’ta tanımlanmış bir değişkeni aynı isimle yeniden tanımlayabilirsiniz. Buna gölgeleme (shadoving) deniyor. Gölgeleyen değişken kendi etki alanı bitene kadar kullanılmaya devam ediyor etki alanı bitince daha önce tanımlanan değişkeni yeniden kullanabiliyorsunuz.

fn main() {
    let x = 5;

    let x = x + 1;

    {
        let x = x * 2;
        println!("The value of x in the inner scope is: {x}");
    }

    println!("The value of x is: {x}");
}

Yukarıdaki örnekte değeri yazdırdığımız içerideki scope ‘ta (etki alanı) 12 en sonda ilk tanımlamada kalan değer olan 6 yı yazdıracaktır.

Gölgeleme (shadowing) ile değişkeni yeniden tanımladığınızda onun veri tipini (data type) değiştirebiliyorsunuz. Ama mut ile tanımladığınız bir değişekene farklı veri tipinde bir değer atamaya çalışırsanız derleyici size hata vereccektir. Aşağıdaki iki örneği inceleyin.

let spaces = "   ";
    let spaces = spaces.len(); // geçerli
let mut spaces = "   ";
    spaces = spaces.len(); // hatalı : expected `&str`, found `usize`

Kaynak : https://doc.rust-lang.org/book/ch03-01-variables-and-mutability.html (Kod örnekleri kaynaktan alınmıştır)

Yorum yapın