Menu
CoddyTech

Katalog Pustaka

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Rust di Coddy. Pelajaran 60 dari 61.

challenge icon

Tantangan

Mudah

Mari buat sistem katalog library yang menunjukkan bagaimana trait menyatukan berbagai tipe dalam satu antarmuka umum! Kamu akan membuat katalog tempat buku dan majalah, meskipun memiliki property yang berbeda, dapat mendeskripsikan dirinya melalui trait yang sama.

Kamu akan mengatur kodemu dalam tiga file:

  • catalog.rs: Definisikan trait CatalogItem dengan satu method description yang mengembalikan String. Trait ini menetapkan kontrak yang harus dipenuhi semua item library.
  • items.rs: Buat dua struct yang mengimplementasikan trait-mu. Book memiliki title dan author (keduanya String), sedangkan Magazine memiliki name (String) dan nomor issue (u32). Setiap struct harus mengimplementasikan CatalogItem dengan format deskripsinya sendiri.
  • main.rs: Sertakan kedua module dan buat instance Book dan Magazine menggunakan input yang diberikan. Panggil method description pada setiap item dan cetak hasilnya.

Deskripsi Book-mu harus mengikuti format ini:

Book: {title} by {author}

Deskripsi Magazine-mu harus mengikuti format ini:

Magazine: {name}, Issue {issue}

Contohnya, dengan input 1984, George Orwell, Nature, dan 42:

Book: 1984 by George Orwell
Magazine: Nature, Issue 42

Dan dengan input The Rust Book, Steve Klabnik, Science Weekly, dan 156:

Book: The Rust Book by Steve Klabnik
Magazine: Science Weekly, Issue 156

Kamu akan menerima empat input: judul buku, penulis buku, nama majalah, dan nomor terbitan majalah (parse yang terakhir sebagai u32).

Coba sendiri

mod catalog;
mod items;

use catalog::CatalogItem;
use items::{Book, Magazine};

fn main() {
    // Baca input
    let mut book_title = String::new();
    std::io::stdin().read_line(&mut book_title).expect("Failed to read line");
    let book_title = book_title.trim().to_string();

    let mut book_author = String::new();
    std::io::stdin().read_line(&mut book_author).expect("Failed to read line");
    let book_author = book_author.trim().to_string();

    let mut magazine_name = String::new();
    std::io::stdin().read_line(&mut magazine_name).expect("Failed to read line");
    let magazine_name = magazine_name.trim().to_string();

    let mut issue_input = String::new();
    std::io::stdin().read_line(&mut issue_input).expect("Failed to read line");
    let magazine_issue: u32 = issue_input.trim().parse().expect("Failed to parse issue number");

    // TODO: Buat instance Book menggunakan book_title dan book_author

    // TODO: Buat instance Magazine menggunakan magazine_name dan magazine_issue

    // TODO: Panggil description() pada setiap item dan cetak hasilnya
}

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler Rust online