Menu
Coddy logo textTech

Visión general de los Structs

Parte de la sección Logic & Flow del Journey de Rust de Coddy — lección 21 de 66.

Ahora que entiendes qué son los structs, aprendamos cómo crearlos y usarlos realmente. Esto implica dos pasos: primero definir la estructura del struct, luego crear instancias del mismo.

Para definir un struct, se utiliza la palabra clave struct seguida del nombre del struct y sus campos dentro de llaves. Cada campo tiene un nombre y un tipo:

struct User {
    username: String,
    active: bool,
}

Esto crea una plantilla para una estructura User con dos campos: username de tipo String y active de tipo bool.


Los nombres de las estructuras en Rust siguen PascalCase (también llamado CamelCase): cada palabra comienza con una letra mayúscula, sin guiones bajos. Por ejemplo: User, BlogPost, GamePlayer.

Una vez que hayas definido una estructura, puedes crear instancias de ella especificando valores para cada campo:

let user1 = User {
    username: String::from("alice"),
    active: true,
};

Ten en cuenta que proporcionas el nombre del struct seguido de llaves que contienen cada nombre de campo, dos puntos y su valor. El orden de los campos no tiene que coincidir con el orden de definición.

Para acceder al valor de un campo de una instancia de struct, utiliza la notación de punto: el nombre de la instancia seguido de un punto y el nombre del campo:

println!("{}", user1.username); // alice
println!("{}", user1.active);   // true

También puedes actualizar el valor de un campo usando la notación de punto, siempre que la instancia esté declarada con let mut:

let mut user1 = User {
    username: String::from("alice"),
    active: true,
};
user1.active = false;
challenge icon

Desafío

Fácil

Recibirás tres entradas: el nombre de un producto, un precio (como un número decimal) y una cantidad en stock (como un número entero). Define una estructura Product con tres campos: name de tipo String, price de tipo f64, y stock de tipo i32. Luego, crea una instancia de esta estructura utilizando los valores de entrada e imprime la información del producto.

Requerimientos:

  • Define una estructura Product con los campos: name: String, price: f64, y stock: i32
  • Lee la primera entrada como el nombre del producto
  • Lee la segunda entrada y conviértela a f64 para el precio
  • Lee la tercera entrada y conviértela a i32 para la cantidad en stock
  • Crea una instancia de la estructura Product con estos valores
  • Imprime la información del producto en el formato exacto que se muestra a continuación

Entrada:

  • Primera línea: Nombre del producto (por ejemplo, Laptop)
  • Segunda línea: Precio como un número decimal (por ejemplo, 999.99)
  • Tercera línea: Cantidad en stock como un número entero (por ejemplo, 15)

Salida:

  • Primera línea: Product: [name]
  • Segunda línea: Price: $[price]
  • Tercera línea: Stock: [quantity]

Hoja de referencia

Los nombres de las estructuras utilizan PascalCase (por ejemplo, UserAccount). Para definir una estructura, utiliza la palabra clave struct seguida del nombre de la estructura y sus campos dentro de llaves:

struct User {
    username: String,
    active: bool,
}

Cada campo tiene un nombre y un tipo.

Para crear una instancia de una estructura, especifica los valores para cada campo:

let user1 = User {
    username: String::from("alice"),
    active: true,
};

El orden de los campos en la instancia no tiene que coincidir con el orden de definición.

Para acceder a un campo, utiliza la notación de puntos — el nombre de la instancia seguido de un punto y el nombre del campo:

println!("{}", user1.username); // imprime: alice
println!("{}", user1.active);   // imprime: true

Pruébalo tú mismo

use std::io;

// TODO: Define tu struct Product aquí


fn main() {
    // Leer el nombre del producto
    let mut name = String::new();
    io::stdin().read_line(&mut name).expect("Failed to read line");
    let name = name.trim().to_string();
    
    // Leer el precio
    let mut price_input = String::new();
    io::stdin().read_line(&mut price_input).expect("Failed to read line");
    let price: f64 = price_input.trim().parse().expect("Failed to parse price");
    
    // Leer la cantidad en stock
    let mut stock_input = String::new();
    io::stdin().read_line(&mut stock_input).expect("Failed to read line");
    let stock: i32 = stock_input.trim().parse().expect("Failed to parse stock");
    
    // TODO: Crear una instancia de la struct Product usando los valores de entrada
    
    
    // TODO: Imprimir la información del producto en el formato requerido
    
}
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 Logic & Flow