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); // trueTambié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;Desafío
FácilRecibirá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
Productcon los campos:name: String,price: f64, ystock: i32 - Lee la primera entrada como el nombre del producto
- Lee la segunda entrada y conviértela a
f64para el precio - Lee la tercera entrada y conviértela a
i32para la cantidad en stock - Crea una instancia de la estructura
Productcon 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: truePrué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
}Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Logic & Flow
1Flujo de control avanzado
La expresión 'match'Coincidencia de múltiples valoresCoincidencia de rangosLa expresión 'if let'Bucles como expresionesResumen - Analizador de comandos simple4Agrupando datos con Structs
¿Qué es un Struct?Visión general de los StructsAcceso a los campos de un StructStructs mutablesStructs como parámetros de funcionesStructs de tuplaResumen - Crear un Struct de Libro7Manejo de errores con 'Result'
¿Qué es un 'Result'?Uso de 'match' con 'Result'is_ok() e is_err()Atajos: unwrap y expectEl operador de signo de interrogación '?'Parsing de Strings a númerosResumen - Función de división segura10Closures y funciones anónimas
¿Qué es un Closure?Definir un Closure simpleClosures con parámetrosCapturar el entornoResumen - Closure sumador simple2Introducción a los vectores
¿Qué es un vector?Crear un vectorAñadir elementos con pushAcceder a los elementos de un vectorIterar sobre un vectorIteración mutableEliminar elementosResumen: Rastreador de puntuación básico5Pares clave-valor con Hash Maps
¿Qué es un Hash Map?Crear un Hash MapInsertar pares clave-valorAcceder a los valoresIterar sobre un Hash MapActualizar un valorEliminar un parRepaso: Contador de palabras8Proyecto: Inventario simple de artículos
Configuración del proyectoAgregar un artículoVerificar el stockVender un artículoUniendo todo3Lista de tareas en la línea de comandos
Configuración del proyectoAñadir una tareaVer todas las tareasEliminar una tareaCódigo final