Lições do módulo (2/2)
Tipos Primitivos
Rust é uma linguagem de tipagem estática, o que significa que ela deve conhecer o tipo de todas as variáveis em tempo de compilação. Normalmente, o compilador pode inferir o tipo com base no valor atribuído, mas às vezes é necessário ou útil especificá-lo manualmente.
Os tipos primitivos em Rust são divididos em duas categorias principais: escalares (valor único) e compostos (grupo de valores).
Tipos escalares
Os tipos escalares representam um único valor. Rust tem quatro tipos escalares fundamentais:
- Inteiros: números inteiros. Eles podem ser assinados (
i8,i16,i32,i64,i128,isize) ou não assinados (u8,u16,u32,u64,u128,usize). O tipo padrão éi32. - Ponto flutuante: Números com casas decimais. Eles podem ser
f32ouf64(precisão dupla, padrão). - Booleanos: Representa a verdade lógica com
trueoufalse(tipobool). - Caracteres: um único valor escalar Unicode entre aspas simples (tipo
char), por exemplo,'a','ℤ'ou emoji'😻'.
Exemplo de anotação de tipo explícita:
let x: i64 = 42;
let y: f64 = 3.1415;
let is_rust_awesome: bool = true;
let heart_emoji: char = '❤';Tipos compostos
Os tipos compostos podem agrupar vários valores em um único tipo. Rust tem dois tipos principais de compostos primitivos:
Tuplas
Uma tupla agrupa valores de diferentes tipos em uma coleção de tamanho fixo:
let person: (String, i32) = (String::from("Alice"), 30);
// Destructuring to extract values
let (name, age) = person;
// Direct access with index using dot (.)
let name_direct = person.0;
let age_direct = person.1;Matrizes (listas de tamanho fixo)
Um array agrupa vários elementos do mesmo tipo em uma coleção de tamanho fixo armazenada na pilha:
let numbers = [1, 2, 3, 4, 5]; // Inferred as [i32; 5]
let first = numbers[0]; // Access by index
let third = numbers[2];Se você tentar acessar um índice fora dos limites do array (por exemplo, numbers[10]), o Rust irá travar imediatamente (pânico) em tempo de execução, em vez de permitir acesso não autorizado à memória.
Comparação
| Recurso | Tupla | Matriz |
|---|---|---|
| Tipos de elementos | Pode ser diferente | Deve ser o mesmo |
| Tamanho | Fixo | Fixo |
| Acesso | Índice via ponto (por exemplo, .0) | Colchetes (por exemplo, [0]) |
Experimente você mesmo
Declare uma tupla chamada stats contendo a idade 30 (inteiro) e a pontuação 95,5 (flutuante). A seguir, imprima a pontuação na tela acessando diretamente o segundo elemento da tupla usando seu índice.
Mostrar dica
Crie a tupla com `let stats = (30, 95.5);`. Acesse o segundo elemento usando `stats.1` dentro da macro `println!`.
Solução disponível após 3 tentativas
Declare um array chamado numbers contendo os valores inteiros de 1 a 5. Imprima o terceiro elemento do array (índice 2) na tela usando println!.
Mostrar dica
Declare o array com `let numbers = [1, 2, 3, 4, 5];` e acesse o terceiro elemento indexando-o com `[2]`.
Solução disponível após 3 tentativas
Dada a tupla `let point = (10, 20);`, use a desestruturação para extrair os valores em duas variáveis chamadas `x` e `y`. Em seguida, imprima a soma de `x` e `y`.
Mostrar dica
Use a sintaxe `let (x, y) = point;` para desestruturar a tupla e então some as variáveis em `println!`.
Solução disponível após 3 tentativas