Pular para conteúdo

Aula 02 - Fundamentos da Linguagem 🧩

Objetivo

Objetivo: Entender como o Rust lida com dados através de variáveis imutáveis por padrão, conhecer os tipos primitivos e aprender o conceito de shadowing.


1. Variáveis e Imutabilidade 🔒

Por padrão, todas as variáveis no Rust são imutáveis. Isso é uma escolha de design para garantir segurança e concorrência.

Imutável vs Mutável

fn main() {
    let x = 5; // Imutável
    // x = 6; // ERRO de compilação!

    let mut y = 10; // Mutável (usando 'mut')
    println!("y era: {}", y);
    y = 15; // OK!
    println!("y agora é: {}", y);
}

2. Tipos Primitivos 🧱

Rust é uma linguagem de tipagem estática, mas possui inferência de tipos.

Tipos Escalares

  1. Inteiros: i8, u8, i32 (padrão), u32, i64, u64, isize, usize.
  2. Ponto Flutuante: f32, f64 (padrão).
  3. Booleano: bool (true ou false).
  4. Caractere: char (representa um valor Unicode de 4 bytes).

Tipos Compostos

  1. Tuplas: Agrupam vários valores de tipos diferentes.
    let tup: (i32, f64, u8) = (500, 6.4, 1);
    let (x, y, z) = tup; // Destruturação
    
  2. Arrays: Agrupam valores do mesmo tipo com tamanho fixo.
    let a = [1, 2, 3, 4, 5];
    let primeiro = a[0];
    

3. Constantes vs Variáveis 💎

Constantes são sempre imutáveis e seu tipo deve ser anotado explicitamente.

const SEGUNDOS_EM_UM_MINUTO: u32 = 60;

--- ## 4. Shadowing (Sombreamento) 👤

Shadowing permite declarar uma nova variável com o mesmo nome de uma anterior, "escondendo-a".

fn main() {
    let x = 5;
    let x = x + 1; // Shadowing
    {
        let x = x * 2;
        println!("x interno: {}", x); // 12
    }
    println!("x externo: {}", x); // 6
}

Visualização de Escopo e Shadowing

graph TD
    A["let x = 5"] --> B["let x = x + 1 (x=6)"]
    B --> C["Escopo Interno"]
    subgraph "Escopo Local"
        C --> D["let x = x * 2 (x=12)"]
    end
    D --> E["Fim do Escopo"]
    E --> F["x volta ao valor externo (x=6)"]

5. Mini-Projeto: Conversor de Temperatura 🌡️

Crie um programa que faça o seguinte: 1. Declare uma constante para o fator de conversão de Celsius para Fahrenheit. 2. Use variáveis mutáveis para armazenar o valor de entrada. 3. Utilize shadowing para transformar o resultado de f64 em uma mensagem formatada String. 4. Exiba o resultado no console.


6. Exercício de Fixação 🧠

Atenção

Tentar acessar um índice fora do array causará um panic em tempo de execução, mas o Rust verificará isso para você.

  1. Qual a palavra-chave usada para tornar uma variável mutável?
  2. Explique a diferença entre uma variável imutável e uma constante.
  3. O que acontece com a memória quando fazemos shadowing de uma variável?

Próxima Aula: Vamos controlar o fluxo do programa com Controle de Fluxo! 🔄