Saltar al contenido principal
eLearner.app
Módulo 4 · Lección 2 de 28/14 en el curso~12 min
Lecciones del módulo (2/2)

Métodos y bloques impl

En Rust, los métodos son similares a las funciones, pero se definen dentro del contexto de una struct (o de un enum o trait) y su primer parámetro es siempre self, que representa la instancia de la struct sobre la cual se llama al método.

Definir los Métodos con impl

Para definir los métodos en una struct, se usa un bloque impl (implementation) con el nombre de la struct:

Code
struct Rectangle {
    width: u32,
    height: u32,
}

impl Rectangle {
    // Questo è un metodo d'istanza. Prende &self in lettura.
    fn area(&self) -> u32 {
        self.width * self.height
    }
}

fn main() {
    let rect = Rectangle { width: 30, height: 50 };

    // Chiamata al metodo tramite notazione con punto
    println!("L'area è: {}", rect.area());
}

Funciones Asociadas (Estáticas)

Las funciones definidas en un bloque impl que no aceptan self como primer parámetro se denominan funciones asociadas (equivalentes a los métodos estáticos en otros lenguajes).

A menudo se utilizan como constructores para devolver nuevas instancias de la struct. Para llamarlas se usa la sintaxis de doble dos puntos :::

Code
impl Rectangle {
    // Funzione associata
    fn square(size: u32) -> Rectangle {
        Rectangle {
            width: size,
            height: size,
        }
    }
}

fn main() {
    // Chiamata alla funzione associata
     let sq = Rectangle::square(10);
 }

Métodos que Modifican el Estado: &mut self

Si un método necesita modificar los campos de la struct, debe declarar el primer parámetro como &mut self. La propia instancia sobre la que se llama al método debe declararse como mutable (let mut):

Code
impl Rectangle {
    fn double_size(&mut self) {
        self.width *= 2;
        self.height *= 2;
    }
}

Pruébalo tú

Ejercicio#rust.m4.l2.e1
Intentos: 0Cargando...

Completa el bloque impl definiendo el método area que tome &self y devuelva u32 (la multiplicación de width y height).

Cargando editor...
Mostrar pista

Escribe `fn area(&self) -> u32 { self.width \* self.height }`dentro del bloque`impl Rectangle`.

Solución disponible después de 3 intentos

Ejercicio#rust.m4.l2.e2
Intentos: 0Cargando...

Define la función asociada square dentro de impl Rectangle, que reciba size: u32 y devuelva una instancia de Rectangle con ancho y alto igual a size.

Cargando editor...
Mostrar pista

Escribe `fn square(size: u32) -> Rectangle { Rectangle { width: size, height: size } }`dentro del bloque`impl`.

Solución disponible después de 3 intentos

Ejercicio#rust.m4.l2.e3
Intentos: 0Cargando...

Añada el método mutador scale a Rectangle dentro del bloque impl. El método scale debe tomar una referencia mutable a self (&mut self) y un parámetro factor: u32, y multiplicar tanto width como height de Rectangle por factor.

Cargando editor...
Mostrar pista

Implementa `fn scale(&mut self, factor: u32)`para actualizar`self.width`y`self.height`multiplicándolos por`factor`.

Solución disponible después de 3 intentos