Menu
Coddy logo textTech

El Parámetro Self

Parte de la sección Object Oriented Programming del Journey de Rust de Coddy — lección 2 de 61.

Cuando un método necesita acceder a los datos almacenados en una instancia de struct, utiliza el parámetro &self. Este parámetro especial es siempre el primer argumento en un método y representa una referencia a la instancia sobre la cual se llama al método.

El símbolo & significa que estamos tomando prestada la instancia en lugar de tomar posesión de ella. Esto permite que el método lea los campos de la estructura sin consumir la instancia:

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

impl Rectangle {
    fn area(&self) -> u32 {
        self.width * self.height
    }
    
    fn is_square(&self) -> bool {
        self.width == self.height
    }
}

Dentro del cuerpo del método, self te da acceso a todos los campos de la estructura usando la notación de puntos. El método area lee tanto width como height para calcular y devolver el resultado.

Debido a que &self solo toma prestada la instancia, puedes llamar a múltiples métodos en la misma estructura sin ningún problema:

fn main() {
    let rect = Rectangle { width: 10, height: 5 };
    
    println!("Area: {}", rect.area());      // 50
    println!("Square? {}", rect.is_square()); // falso
}

Los métodos que usan &self son de solo lectura; pueden examinar los datos de la estructura pero no pueden cambiarlos. En la siguiente lección, aprenderás cómo crear métodos que pueden modificar la instancia.

challenge icon

Desafío

Fácil

Crea una estructura Circle con un solo campo: radius (f64).

Añade un bloque de implementación para Circle con dos métodos que utilicen &self:

  • circumference — devuelve la circunferencia como f64 (fórmula: 2.0 * 3.14159 * radius)
  • diameter — devuelve el diámetro como f64 (fórmula: 2.0 * radius)

Recibirás una entrada:

  • El radio del círculo (f64)

Crea una instancia de Circle con el radio proporcionado, luego imprime la circunferencia y el diámetro en líneas separadas.

Formato de salida esperado:

{circumference}
{diameter}

Hoja de referencia

Los métodos acceden a los datos de la estructura utilizando el parámetro &self, que debe ser el primer argumento. El símbolo & significa que el método toma prestada la instancia en lugar de tomar su propiedad:

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

impl Rectangle {
    fn area(&self) -> u32 {
        self.width * self.height
    }
    
    fn is_square(&self) -> bool {
        self.width == self.height
    }
}

Dentro del método, utiliza self con la notación de puntos para acceder a los campos de la estructura. Los métodos con &self son de solo lectura y pueden examinar los datos pero no modificarlos.

Debido a que &self solo toma prestada la instancia, puedes llamar a múltiples métodos en la misma estructura:

let rect = Rectangle { width: 10, height: 5 };
println!("Area: {}", rect.area());      // 50
println!("Square? {}", rect.is_square()); // false

Pruébalo tú mismo

use std::io;

// TODO: Define la estructura Circle aquí


// TODO: Agrega el bloque de implementación para Circle con los métodos circumference y diameter


fn main() {
    let mut input = String::new();
    io::stdin().read_line(&mut input).expect("Failed to read line");
    let radius: f64 = input.trim().parse().expect("Invalid number");
    
    // TODO: Crea una instancia de Circle e imprime la circunferencia y el diámetro
    
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Object Oriented Programming