SwiftHTML & CSSSolidityDesenvolvimento de JogosSolana/Rust
12.11.2024

Lição: 007: Structs e Enums em Rust

Nesta aula, vamos explorar dois tipos de dados fundamentais em Rust: structs e enums. Esses tipos permitem que você crie estruturas de dados complexas e defina seus próprios tipos, o que pode aumentar muito a expressividade do seu código.

Structs em Rust

Structs são usadas para criar tipos de dados personalizados que permitem agrupar dados relacionados. Uma struct é definida usando a palavra-chave struct, seguida pelo nome da struct e um bloco que contém seus campos.

Definindo uma Struct

Aqui está um exemplo de definição de uma struct simples.

struct Pessoa {
    nome: String,
    idade: u32,
}

Neste exemplo, definimos uma struct Pessoa com dois campos: um nome do tipo String e uma idade do tipo u32.

Criando uma Instância de uma Struct

Você pode criar uma instância de uma struct usando uma sintaxe semelhante à inicialização de objetos:

fn main() {
    let pessoa = Pessoa {
        nome: String::from("Alice"),
        idade: 30,
    };

    println!("Nome: {}, Idade: {}", pessoa.nome, pessoa.idade);
}

Neste trecho, criamos uma nova instância de Pessoa com o nome "Alice" e idade 30, e imprimimos seus campos.

Métodos em Structs

Você pode definir métodos para uma struct usando blocos impl. Veja como você pode adicionar funcionalidade à nossa struct Pessoa:

impl Pessoa {
    fn cumprimentar(&self) {
        println!("Olá, meu nome é {} e eu tenho {} anos.", self.nome, self.idade);
    }
}

fn main() {
    let pessoa = Pessoa {
        nome: String::from("Alice"),
        idade: 30,
    };

    pessoa.cumprimentar();
}

Neste exemplo, definimos um método cumprimentar que imprime uma mensagem de saudação usando os campos da struct.

Enums em Rust

Enums (abreviação de enumerações) permitem definir um tipo que pode ter várias variantes. Isso é particularmente útil quando você quer representar um valor que pode ser uma de várias opções diferentes.

Definindo um Enum

Aqui está um exemplo de definição de um enum:

enum Direcao {
    Norte,
    Sul,
    Leste,
    Oeste,
}

Neste exemplo, definimos um enum Direcao com quatro variantes possíveis: Norte, Sul, Leste e Oeste.

Usando Enums

Você pode usar enums em instruções match para lidar com diferentes casos. Aqui está um exemplo simples:

fn imprimir_direcao(direcao: Direcao) {
    match direcao {
        Direcao::Norte => println!("Você está indo para o Norte."),
        Direcao::Sul => println!("Você está indo para o Sul."),
        Direcao::Leste => println!("Você está indo para o Leste."),
        Direcao::Oeste => println!("Você está indo para o Oeste."),
    }
}

fn main() {
    let direcao = Direcao::Leste;

    imprimir_direcao(direcao);
}

Neste código, definimos uma função imprimir_direcao que recebe um enum Direcao e combina suas variantes para imprimir uma mensagem correspondente.

Enums com Dados

Enums também podem ter dados associados. Isso é particularmente útil quando você quer vincular dados a uma variante. Veja um exemplo:

enum Forma {
    Circulo(f64),         // Raio
    Retangulo(f64, f64),  // Largura e Altura
}

fn imprimir_forma(forma: Forma) {
    match forma {
        Forma::Circulo(raio) => {
            println!("Esta é um círculo com raio: {}", raio);
        }
        Forma::Retangulo(largura, altura) => {
            println!("Este é um retângulo com largura: {} e altura: {}", largura, altura);
        }
    }
}

fn main() {
    let circulo = Forma::Circulo(2.5);
    let retangulo = Forma::Retangulo(4.0, 5.0);

    imprimir_forma(circulo);
    imprimir_forma(retangulo);
}

Neste exemplo, definimos um enum Forma que pode representar tanto um círculo com um raio quanto um retângulo com largura e altura. A função imprimir_forma combina as variantes do enum e imprime as informações relevantes.

Conclusão

Nesta aula, cobrimos o básico de structs e enums em Rust. Structs permitem criar tipos de dados complexos agrupando dados relacionados, enquanto enums permitem definir tipos que podem ter várias variantes. Ambas as características são fundamentais para escrever um código Rust claro e eficiente.

Continue praticando criando suas próprias structs e enums, e tente construir sistemas mais complexos usando esses tipos de dados!

Did you like this article? Rate it from 1 to 5:

Thank you for voting!