Rust Fundamentos Básico
Tipos escalares e compostos
Em Rust, todo valor tem um tipo. Os tipos escalares representam um único valor: inteiros (i32, u8, etc.), floats (f64, f32), char (um caractere Unicode) e bool (true/false). Já os tipos compostos agrupam vários valores: tuplas (tamanho fixo, tipos podem variar) e arrays (tamanho fixo, todos os elementos do mesmo tipo).
Rust é estaticamente tipado: o compilador precisa saber o tipo de cada variável em tempo de compilação. Muitas vezes ele infere o tipo pelo contexto, mas você pode (e deve, quando ajudar a clareza) anotar explicitamente, como em let x: i32 = 5;.
Tuplas são úteis para retornar múltiplos valores de uma função ou agrupar dados heterogêneos temporariamente. Arrays são úteis quando você sabe o tamanho fixo e quer todos os elementos do mesmo tipo — eles ficam na pilha (stack) e têm tamanho conhecido em tempo de compilação.
Neste card você vai praticar a declaração desses tipos, o acesso a elementos de tuplas e arrays, e como o compilador Rust garante segurança de tipos e limites.
Pontos-chave
- Inteiros têm tamanho e sinal explícitos:
i32,u8,isize, etc.; floats sãof64(padrão) ouf32. charrepresenta um caractere Unicode e usa aspas simples ('a'), diferente de&strque usa aspas duplas.boolsó aceitatrueoufalsee é usado em condições.- Tuplas agrupam valores de tipos possivelmente diferentes e podem ser desestruturadas com
let (a, b) = tupla;. - Arrays têm tamanho fixo e todos os elementos do mesmo tipo; o acesso é feito por índice e o compilador verifica limites em tempo de execução.
fn main() {
// Tipos escalares
let idade: u8 = 30; // inteiro sem sinal de 8 bits
let saldo: i64 = -150; // inteiro com sinal de 64 bits
let pi: f64 = 3.1415; // float de 64 bits (padrão)
let letra: char = 'R'; // caractere Unicode
let ativo: bool = true; // booleano
println!("idade={}, saldo={}, pi={}, letra={}, ativo={}", idade, saldo, pi, letra, ativo);
// Tupla: tipos diferentes, tamanho fixo
let pessoa: (&str, u8, f64) = ("Ana", 28, 1.65);
let (nome, idade_ana, altura) = pessoa; // desestruturação
println!("{} tem {} anos e {:.2}m", nome, idade_ana, altura);
println!("Primeiro elemento da tupla: {}", pessoa.0);
// Array: mesmo tipo, tamanho fixo
let notas: [f64; 4] = [7.5, 8.0, 6.5, 9.0];
let soma: f64 = notas.iter().sum();
let media = soma / notas.len() as f64;
println!("Notas: {:?}", notas);
println!("Média: {:.2}", media);
// Acesso indexado
println!("Primeira nota: {}", notas[0]);
}