Iniciante Fundamentos

Structs

Structs agrupam dados relacionados em um tipo próprio, como um molde para seus objetos.

Definir e instanciar

struct Usuario {
    nome: String,
    idade: u32,
    ativo: bool,
}

fn main() {
    let u = Usuario {
        nome: String::from("Ana"),
        idade: 30,
        ativo: true,
    };
    println!("{} tem {} anos", u.nome, u.idade);
}

Instância mutável

struct Ponto {
    x: i32,
    y: i32,
}

fn main() {
    let mut p = Ponto { x: 0, y: 0 };
    p.x = 10;
    println!("({}, {})", p.x, p.y);
}

Métodos com impl

O bloco impl adiciona métodos. O primeiro parâmetro &self é a própria instância.

struct Retangulo {
    largura: u32,
    altura: u32,
}

impl Retangulo {
    fn area(&self) -> u32 {
        self.largura * self.altura
    }
}

fn main() {
    let r = Retangulo { largura: 4, altura: 5 };
    println!("Área: {}", r.area()); // 20
}

Funções associadas

Sem self, viram funções associadas, úteis como construtores. Chame com ::.

struct Circulo {
    raio: f64,
}

impl Circulo {
    fn novo(raio: f64) -> Circulo {
        Circulo { raio }
    }
}

fn main() {
    let c = Circulo::novo(2.0);
    println!("{}", c.raio);
}