4 - Resumen semana 1

4 - Resumen semana 1

¡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.