InferĂȘncia de Tipo

Rust verĂĄ como a variĂĄvel Ă© usada para determinar o tipo:

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);
}
This slide should take about 3 minutes.

Este slide demonstra como o compilador Rust infere tipos com base em restriçÔes dadas por declaraçÔes e usos de variåveis.

É muito importante enfatizar que variĂĄveis declaradas assim nĂŁo sĂŁo de um tipo dinĂąmico "qualquer tipo" que possa armazenar quaisquer dados. O cĂłdigo de mĂĄquina gerado por tal declaração Ă© idĂȘntico Ă  declaração explĂ­cita de um tipo. O compilador faz o trabalho para nĂłs e nos ajuda a escrever um cĂłdigo mais conciso.

Quando nada restringe o tipo de um literal inteiro, Rust assume i32. Isso Ă s vezes aparece como {integer} nas mensagens de erro. Da mesma forma, os literais de ponto flutuante assumem f64.

fn main() {
    let x = 3.14;
    let y = 20;
    assert_eq!(x, y);
    // ERRO: nenhuma implementação para `{float} == {integer}`
}