Armazenando Livros
Nós iremos aprender muito mais sobre structs e o tipo Vec<T>
amanhã. Por hora, você só precisa conhecer parte de sua API:
fn main() { let mut vec = vec![10, 20]; vec.push(30); let midpoint = vec.len() / 2; println!("valor do meio: {}", vec[midpoint]); for item in &vec { println!("item: {item}"); } }
Use isto para modelar uma coleção de livros de uma biblioteca. Copie o código abaixo para https://play.rust-lang.org/ e atualize os tipos para compilar:
struct Library { books: Vec<Book>, } struct Book { title: String, year: u16, } impl Book { // Este é um construtor, utilizado abaixo. fn new(title: &str, year: u16) -> Book { Book { title: String::from(title), year, } } } // Implemente os métodos abaixo. Atualize o parâmetro `self` para // indicar o nível requerido de ownership sobre o objeto: // // - `&self` para acesso compartilhado de apenas leitura, // - `&mut self` para acesso mutável exclusivo, // - `self` para acesso exclusivo por valor. impl Library { fn new() -> Library { todo!("Inicialize e retorne um valor `Biblioteca`") } //fn tamanho(self) -> usize { // todo!("Retorne o tamanho de `self.livros`") //} //fn esta_vazia(self) -> bool { // todo!("Retorne `true` se `self.livros` for vazio") //} //fn adicionar_livro(self, book: Livro) { // todo!("Adicione um novo livro em `self.livros`") //} //fn imprimir_livros(self) { // todo!("Itere sobre `self.livros` e sobre o título e ano de cada livro") //} //fn livro_mais_antigo(self) -> Option<&Livro> { // todo!("Retorne uma referência para o livro mais antigo (se houver)") //} } // Isto demonstra o comportamento esperado. Descomente o código abaixo e // implemente os métodos que faltam. Você precisará atualizar as // assinaturas dos métodos, incluindo o parâmetro "self"! Você talvez // precise atualizar as atribuições de variável dentro de `main()`. fn main() { let library = Library::new(); //println!("A biblioteca está vazia: biblioteca.esta_vazia() -> {}", biblioteca.esta_vazia()); // //biblioteca.adicionar_livro(Livro::new("Lord of the Rings", 1954)); //biblioteca.adicionar_livro(Livro::new("Alice's Adventures in Wonderland", 1865)); // //println!("The biblioteca não está mais vazia: biblioteca.esta_vazia() -> {}", biblioteca.esta_vazia()); // // //biblioteca.imprimir_livros(); // //match biblioteca.livro_mais_antigo() { // Some(livro) => println!("O livro mais antigo é {}", livro.titulo), // None => println!("A biblioteca está vazia!"), //} // //println!("The biblioteca tem {} livros", biblioteca.tamanho()); //biblioteca.imprimir_livros(); }