Tür Dönüştürme (Casting)

Rust’ta örtük (implicit) tür dönüşümleri yoktur, ancak as ile açık (explicit) tür dönüştürmelerini (casts) destekler. Bunlar genellikle tanımlandıkları yerlerde C semantiğini takip eder.

fn main() {
    let value: i64 = 1000;
    println!("u16 olarak: {}", value as u16);
    println!("i16 olarak: {}", value as i16);
    println!("u8 olarak: {}", value as u8);
}

as’in sonuçları Rust’ta her zaman tanımlıdır ve platformlar arasında tutarlıdır. Bu, işaret (sign) değiştirme veya daha küçük bir türe dönüştürme (cast) konusundaki sezginizle uyuşmayabilir – belgeleri kontrol edin ve açıklık için yorum yapın.

as ile dönüştürme (cast), yanlış kullanılması kolay olan nispeten keskin bir araçtır ve gelecekteki bakım çalışmaları (maintenance work) kullanılan türleri veya türlerdeki değer aralıklarını değiştirdikçe ince hataların kaynağı olabilir. Tür dnüştürmesi en iyi, niyetin koşulsuz olarak kesmeyi belirtmek olduğu durumlarda kullanılır (örneğin, yüksek bitlerde ne olursa olsun bir u64’ün alt 32 bitini as u32 ile seçmek).

Hatasız tür dönüştürmeleri (cast) için (örneğin u32’den u64’e), dönüşümün gerçekten hatasız olduğunu doğrulamak için as yerine From veya Into kullanmayı tercih edin. Hatalı olabilecek dönüştürmeler (cast) için, uyan ve uymayan dnüştürmeleri (cast) ele almak istediğinizde TryFrom ve TryInto mevcuttur.

This slide should take about 5 minutes.

Bu slayttan sonra bir mola vermeyi düşünün.

as, C++’daki bir statik dönüştürmeye (static cast) benzer. Veri kaybı olabilecek durumlarda as kullanımı genellikle önerilmez veya en azından açıklayıcı bir yorumu hak eder.

Bu, tamsayıları bir indeks olarak kullanmak üzere usize’a dönüştürürken yaygındır.