¡Bienvenidos de nuevo a Rustaceo! He completado mi primera semana en el viaje para dominar Rust, y quiero compartir mis reflexiones y aprendizajes. Ha sido una semana llena de descubrimientos, desafíos y emoción al adentrarme en este poderoso lenguaje de programación. Acompáñame mientras repaso lo que he aprendido, los obstáculos que enfrenté y cómo nuestros amigos Pokémon me ayudaron a entender mejor los conceptos.
Primeros pasos en Rust #
Al comenzar, instalé Rust utilizando rustup
y configuré mi entorno de desarrollo con RustRover, ya que ofrece una versión gratuita. Inmediatamente me sumergí en “El Libro de Rust”, cubriendo los capítulos 1 al 3 durante los primeros días.
Hola, mundo #
Mi primer programa en Rust fue el clásico “Hola, mundo”. Aunque sencillo, me permitió familiarizarme con la sintaxis básica y el flujo de trabajo de compilación con cargo
.
fn main() {
println!("¡Hola, mundo!");
}
Explorando variables y mutabilidad #
Aprendí que en Rust, las variables son inmutables por defecto. Esto promueve la escritura de código seguro y predecible. Sin embargo, podemos hacer que una variable sea mutable utilizando la palabra clave mut
. Puedes leer el artículo completo aquí [[1. Explorando Variables y Mutabilidad en Rust usando Pokémon]].
Ejemplo con Pokémon:
let mut item1_nivel = 5;
println!("El nivel inicial de Item1 es {}.", item1_nivel);
item1_nivel += 1; // Item1 gana experiencia y sube de nivel
println!("Item1 ha subido al nivel {}.", item1_nivel);
Tipos de datos y funciones #
Rust es un lenguaje fuertemente tipado, lo que significa que cada variable tiene un tipo específico conocido en tiempo de compilación. Esto ayuda a prevenir errores comunes.
Tipos escalares y compuestos #
- Escalares:
i32
,f64
,bool
,char
- Compuestos: Tuplas y arreglos
Ejemplo: Datos de un Pokémon
struct Pokémon {
nombre: String,
tipo: String,
nivel: u8,
}
let item4 = Pokémon {
nombre: String::from("Item4"),
tipo: String::from("Planta/Veneno"),
nivel: 5,
};
Funciones #
Las funciones en Rust se definen usando la palabra clave fn
y pueden aceptar parámetros y retornar valores.
Ejemplo: Función para calcular experiencia necesaria para subir de nivel
fn experiencia_para_nivel(nivel_actual: u8) -> u32 {
(nivel_actual as u32).pow(3)
}
let experiencia = experiencia_para_nivel(item4.nivel);
println!("Item4 necesita {} puntos de experiencia para subir de nivel.", experiencia);
Control de flujo #
Exploré cómo usar if
, else
, loop
, while
, y for
para controlar la ejecución del programa.
Ejemplo: Determinar si un Pokémon puede evolucionar
if item4.nivel >= 16 {
println!("¡{} puede evolucionar a Ivysaur!", item4.nombre);
} else {
let niveles_restantes = 16 - item4.nivel;
println!("{} necesita subir {} niveles más para evolucionar.", item4.nombre, niveles_restantes);
}
Primer proyecto: convertidor de temperatura #
Para consolidar lo aprendido, trabajé en un pequeño proyecto: un convertidor de temperatura. Aunque no está directamente relacionado con Pokémon, me ayudó a practicar la entrada y salida de datos, el uso de funciones y el manejo de tipos de datos.
Desafíos enfrentados #
- Comprender la Inmutabilidad por Defecto: Al principio, olvidaba agregar
mut
a las variables que necesitaban ser mutables, lo que causaba errores de compilación. - Manejo de Errores en Entrada de Datos: Tuve que aprender a manejar posibles errores al convertir cadenas de texto a números.
- Sintaxis y Propiedades de Rust: Adaptarme a la sintaxis de Rust y sus características únicas, como el uso de
match
y la gestión de propiedades. - Apoyarse en el compilador: El compilador de Rust es muy completo y te ayuda a darte cuenta de lo que hace falta para corregir el programa.
Lecciones aprendidas #
- Leer los Mensajes de Error: Los mensajes de error de Rust son muy descriptivos y me guiaron para solucionar problemas.
- Practicar es Clave: Hacer ejercicios de Rustlings y pequeños programas reforzó mi comprensión.
- Paciencia y Persistencia: Aprender un nuevo lenguaje lleva tiempo, y es importante ser paciente con uno mismo.
Aplicando los conceptos con pokémon #
Incorporar Pokémon en mis ejemplos hizo que el aprendizaje fuera más entretenido y me ayudó a visualizar mejor los conceptos.
Ejemplo: Lista de Equipo Pokémon
let equipo = ["Item1", "Charizard", "Blastoise", "Venusaur"];
for pokemon in equipo.iter() {
println!("¡Vamos, {}!", pokemon);
}
Próximos pasos #
La próxima semana, me adentraré en el corazón de Rust: la propiedad y el préstamo. Estoy emocionado por entender cómo Rust maneja la memoria de forma segura y cómo puedo aplicar estos conceptos en proyectos más complejos. Espero poder tener el tiempo necesario para explicar lo que aprenda por el camino.
Conclusión #
La primera semana ha sido intensa pero gratificante. He establecido una base sólida en los fundamentos de Rust y estoy ansioso por continuar este viaje. Agradezco la comunidad y los recursos disponibles, que han sido de gran ayuda.