Pular para conteúdo

Aula 07 - Strings e Coleções 🧵

Objetivo

Objetivo: Dominar as principais coleções de dados do Rust, entendendo a diferença entre os tipos de texto e como armazenar listas e mapas com eficiência.


1. O Mundo das Strings 🔤

No Rust, "string" geralmente se refere a dois tipos principais:

  • String: Alocada na Heap, mutável, crescível. Você é o dono dela.
  • &str (String Slice): Uma referência a uma sequência de caracteres UTF-8. Imutável.

Convertendo e Manipulando

let mut s = String::from("Olá"); // String
let slice: &str = " mundo"; // &str

s.push_str(slice); // Adiciona o slice à String
println!("{}", s);

2. Vetores: Vec<T> 📦

Um vetor permite armazenar mais de um valor em uma única estrutura de dados, um ao lado do outro na memória.

let mut v: Vec<i32> = Vec::new();
v.push(10);
v.push(20);

// Forma mais comum usando a macro vec!
let v2 = vec![1, 2, 3];

// Lendo elementos
match v.get(1) {
    Some(valor) => println!("O segundo elemento é {}", valor),
    None => println!("Não há segundo elemento."),
}

3. Mapas de Hash: HashMap<K, V> 🗺️

Armazena um mapeamento de chaves para valores. Útil para buscas rápidas.

use std::collections::HashMap;

let mut scores = HashMap::new();
scores.insert(String::from("Azul"), 10);
scores.insert(String::from("Amarelo"), 50);

// Acessando valores
let time = String::from("Azul");
let score = scores.get(&time); // Retorna Option<&V>

4. Visualização: Como o Vetor cresce 📈

graph TD
    subgraph "Capacidade = 2"
        V1["Vetor [10, 20]"]
    end
    V1 -- push(30) --> V2["Nova Alocação (Cap=4)"]
    subgraph "Capacidade = 4"
        V2["Vetor [10, 20, 30, _ ]"]
    end
    style V2 fill:#dfd,stroke:#333

5. Mini-Projeto: Sistema de Inventário 🎒

Crie um programa que: 1. Use um HashMap para armazenar o nome de itens e suas quantidades. 2. Use um Vec para armazenar uma lista de logs de atividades (ex: "Adicionado 5 maçãs"). 3. Permita ao usuário: - Adicionar um item. - Remover um item. - Ver o inventário total e o histórico de logs.


6. Exercício de Fixação 🧠

Coleções

Lembre-se: Vetores e Mapas armazenam seus dados na Heap, o que permite que cresçam dinamicamente.

  1. Por que não podemos usar um literal de string ("texto") quando precisamos mudar o conteúdo?
  2. Qual a vantagem de usar v.get(index) em vez de v[index]?
  3. O que acontece se inserirmos uma chave que já existe em um HashMap?

Próxima Aula: Vamos criar nossos próprios tipos complexos com Structs e Enums! 🏗️