Tür Çıkarımı (Type Inference)
Rust, türü belirlemek için değişkenin nasıl kullanıldığına bakacaktır:
fn takes_u32(x: u32) { println!("u32: {x}"); } fn takes_i8(y: i8) { println!("i8: {y}"); } fn main() { let x = 10; let y = 20; takes_u32(x); takes_i8(y); // takes_u32(y); }
Bu slayt, Rust derleyicisinin değişken bildirimleri ve kullanımları tarafından verilen kısıtlamalara (constraints) dayanarak türleri nasıl çıkarım (inference) yapabildiğini gösterir.
Bu şekilde bildirilen değişkenlerin herhangi bir veriyi tutabilecek dinamik “herhangi bir tür” olmadığını vurgulamak çok önemlidir. Böyle bir bildirim tarafından oluşturulan makine kodu, bir türün açık (explicit) bildirimiyle aynıdır. Derleyici bizim için işi yapar ve daha kısa kod yazmamıza yardımcı olur.
Bir tamsayı değişmezinin (integer literal) türünü hiçbir şeykısıtlamadığında, Rust varsayılan olarak türü i32
yapar. Bu bazen hata mesajlarında “{integer}” olarak görünür. Benzer şekilde, ondalıklı sayı değişmezleri (floating-point literals) için varsayılan tür f64
’tür.
fn main() { let x = 3.14; let y = 20; assert_eq!(x, y); // HATA: `{float} == {integer}` için gerçekleştirim-uyarlama (implementation) yok }