Forum Discussion

edandresvan's avatar
edandresvan
Copper Contributor
Feb 01, 2023

Un programa RUST de ejemplo

Primeros Pasos con Rust

 

Hola programadores Rust,

 

¿Qué cambios necesita este programa en Rust para ejecutarse exitosamente?

 

 

struct Person {
  name: String,
  age: u8,
  genre: char,
}

fn main() {
  // Vector of family members
  let family: Vec<Person> = Vec::new();

  family.push(Person {
    name: "Frank".to_string(),
    age: 23,
    genre: 'M',
  });

  family.push(Person {
    name: "Carol".to_string(),
    age: 25,
    genre: 'F',
  });

  family.push(Person {
    name: "Edwin".to_string(),
    age: 34,
    genre: 'M',
  });

  // Show current info
  println!("-".repeat(50));
  for individual in family {
    println!("{:?}", individual);
  }

  // Add family lastname
  for member in family {
    member.name = member.name + "Thompson";
  }

  // Increase age by 2
  for adult in family {
    adult.age += 2;
  }

  // Show updated info
  println!("-".repeat(50));
  for individual in family {
    match individual {
      'M' => {
        println!("{} is a man {} years old", individual.name, individual.age);
      }
      'F' => {
        println!(
          "{} is a woman {} years old",
          individual.name, individual.age
        );
      }
    }
  }
}

 

 

#rustlang #programming

 

  • elbruno's avatar
    elbruno
    Iron Contributor

    edandresvan buenas ! 

     

    Debajo puedes ver el codigo completo y funcionando. Y un par de detalles sobre los cambios.

    En 1er lugar, modifiqué el codigo que escribe lineas en el output por

    println!("{}", "-".repeat(50));

    En el Struct agregue un atributo para que se pueda mostrar en las sentencias con println!(), e implementé una función Clone() para que se pueda iterar en modo mutable.

    #[derive(Debug)]
    struct Person {
        name: String,
        age: u8,
        genre: char,
    }
    
    // implement Clone for Person struct
    impl Clone for Person {
        fn clone(&self) -> Self {
            Self {
                name: self.name.clone(),
                age: self.age,
                genre: self.genre,
            }
        }
    }

    Y cambié la forma en la que iteras por los elementos del for each. Lo puedes ver todo en el código completo.

     

    #[derive(Debug)]
    struct Person {
        name: String,
        age: u8,
        genre: char,
    }
    
    // implement Clone for Person struct
    impl Clone for Person {
        fn clone(&self) -> Self {
            Self {
                name: self.name.clone(),
                age: self.age,
                genre: self.genre,
            }
        }
    }
    
    fn main() {
        // Vector of family members
        let mut family: Vec<Person> = Vec::new();
        family.push(Person {
            name: "Alice".to_string(),
            age: 20,
            genre: 'F',
        });
    
        family.push(Person {
            name: "Carol".to_string(),
            age: 25,
            genre: 'F',
        });
    
        family.push(Person {
            name: "Edwin".to_string(),
            age: 34,
            genre: 'M',
        });
    
        // Show current info
        println!("{}", "-".repeat(50));
        println!("Show current information");
        println!("{}", "-".repeat(50));
        for individual in &family {
            println!("{:#?}", individual);
        }
        println!("{}", "-".repeat(50));
    
        // Iterate through Family and add a family lastname to the field name
        for individual in &mut family {
            individual.name = format!("{} {}", individual.name, "Thompson");
        }
    
        println!("{}", "-".repeat(50));
        println!("Show new information after adding the last name");
        println!("{}", "-".repeat(50));
        for individual in &family {
            println!("{:#?}", individual);
        }
        println!("{}", "-".repeat(50));
    
        // rest of the code goes here ...
    }

     Queda completar los últimos pasos. Si tienes problemas o dudas con esos, me avisas ! 

    Un saludo !

    • edandresvan's avatar
      edandresvan
      Copper Contributor

      elbruno 

       

      Hola profe Bruno, gracias por tu respuesta. Estuve probando y ya pude ejecutar el programa con las correcciones. 

       

      Adicionalmente, quería compartir lo que encontré mientras probaba el código:

      1. Se puede cambiar el nombre de la mascota de estas dos formas:

       

       

      member.name = format!("{} {}", member.name, "Thompson");
      
      member.name.push_str(" Thompson");

       

       

      2. Para mostrar una mascota usando la característica de Debug, se puede usar esta sintaxis:

       

       

      println!("{:?}", individual);
      
      println!("{individual:?}");

       

       

      Programa Rust corregido:

       

       

      #[derive(Debug)]
      struct Person {
        name: String,
        age: u8,
        genre: char,
      }
      
      fn main() {
        // Vector of family members
        let mut family: Vec<Person> = Vec::new();
      
        family.push(Person {
          name: "Frank".to_string(),
          age: 23,
          genre: 'M',
        });
      
        family.push(Person {
          name: "Carol".to_string(),
          age: 25,
          genre: 'F',
        });
      
        family.push(Person {
          name: "Edwin".to_string(),
          age: 34,
          genre: 'M',
        });
      
        // Show current info
        println!("{}", "-".repeat(50));
        for individual in &family {
          println!("{individual:?}");
        }
      
        // Add family lastname
        for member in &mut family {
          member.name.push_str(" Thompson");
          //member.name = format!("{} {}", member.name, "Thompson");
        }
      
        // Increase age by 2
        for adult in &mut family {
          adult.age += 2;
        }
      
        // Show updated info
        println!("{}", "-".repeat(50));
        for individual in family {
          match individual.genre {
            'M' => {
              println!("{} is a man {} years old", individual.name, individual.age);
            }
            'F' => {
              println!(
                "{} is a woman {} years old",
                individual.name, individual.age
              );
            }
            _ => {
              println!("{} is {} years old", individual.name, individual.age);
            }
          }
        }
      }

       

       

Resources