Tipos de dados

Rust é uma linguagem fortemente e estaticamente tipada, nela temos alguns tipos

Tipos

TipoTamanhoValor MáximoValor Mínimo
i81 byte127-128Numérico
u81 byte2550Numérico
i162 bytes32767-32768Numérico
u162 bytes655350Numérico
i324 bytes2147483647-2147483648Numérico
u324 bytes42949672950Numérico
i648 bytes9223372036854775807-9223372036854775808Numérico
u648 bytes184467440737095516150Numérico
i12816 bytes170141183460469231731687303715884105727-170141183460469231731687303715884105728Numérico
u12816 bytes3402823669209384634633746074317682114550Numérico
f324 bytes340282350...-340282350...Numérico
f648 bytes1797693134862315700...-1797693134862315700...Numérico
bool1 bytetruefalsebooleano
char4 bytes'\0'􏿿character

Temos também o tipo usize que vai dependender da arquitetura do sistema operacional.

Variáveis

Para declararmos "variáveis" em Rust utilizamos a palavra reservada let, mas o uso de apenas essa palavra para a declaração das "variáveis" armazena tipos imutáveis, para termos variáveis que podem ser alteradas temos que utilizar outra palavra reservada mut.

Temos dois modos de declarar variáveis, uma em que falamos o tipo para o compilador e outra que o compilador "decide o tipo" para nós. Para a declaração que informamos o tipo temos a seguinte sintaxe let nome: tipo = valor e para a que o compilador decide temos a sintaxe let nome = valor;

fn main() {
    let idade_atual: u8 = 22;
    let ano_nascimento = 1999; //inferencia de tipo

    println!("Idade atual {}, ano de nascimento: {}", idade_atual, ano_nascimento);
}

No exemplo acima utilizamos a declaração do tipo e inferência do mesmo, mas também podemos dar uma dica ao compilador ao tipo que iremos utilizar, o tipo padrão para números inteiros é i32, mas é um disperdicio de alguns bytes, podemos fazer da seguinte maneira.

fn main() {
    let idade_atual: u8 = 22;
    let ano_nascimento = 1999_u16;

    println!("Idade atual {}, ano de nascimento: {}", idade_atual, ano_nascimento);
}

Deste modo temos outro jeito de informar ao compilador que tipos queremos utilizar, porém, para este exemplo não faz muito sentido.

fn main() {
    let crab_power = 100_f32;

    println!("Poder do carangueijo {}%", crab_power);
}

Mas para casos como este, esse tipo de abordagem faz mais sentido.