Da trilha de Rust Este conceito ainda não saiu como card do dia. ir para o card de hoje

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ão f64 (padrão) ou f32.
  • char representa um caractere Unicode e usa aspas simples ('a'), diferente de &str que usa aspas duplas.
  • bool só aceita true ou false e é 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.
tipos_escalares_compostos.rs
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]);
}

Exercícios

  1. 1
    Fácil

    Declarando e imprimindo tipos escalares

    Declare uma variável cidade do tipo &str com valor "Recife", uma variável populacao do tipo u32 com valor 1500000, uma variável area do tipo f64 com valor 218.4 e uma variável litoral do tipo bool com valor true. Imprima todas em uma única linha no formato: Cidade: Recife, População: 1500000, Área: 218.4 km², Litoral: true.

    Resolver
  2. 2
    Médio

    Tupla de produto e cálculo de total

    Crie uma tupla chamada produto com os campos: nome (&str), preço unitário (f64) e quantidade (u32). Desestruture a tupla em três variáveis e calcule o valor total (preço * quantidade). Imprima o nome, a quantidade e o total formatado com duas casas decimais no formato: Produto: Caneta, Quantidade: 10, Total: R$ 25.00.

    Resolver
  3. 3
    Desafio

    Array de temperaturas e estatísticas

    Dado um array fixo de 7 temperaturas (f64) representando os dias da semana, calcule e imprima: a média, a maior e a menor temperatura. Use um loop for para percorrer o array e atualizar as variáveis de máximo e mínimo. Imprima no formato: Média: 23.57, Máxima: 30.10, Mínima: 18.20 (com duas casas decimais).

    Resolver

Continue estudando