Menu
Coddy logo textTech

Kütüphane Kataloğu

Coddy'nin Rust Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 60 / 61.

challenge icon

Görev

Kolay

Farklı türleri ortak bir arayüz altında birleştiren trait'lerin nasıl çalıştığını gösteren bir kütüphane katalog sistemi oluşturalım! Farklı özelliklere sahip olmalarına rağmen kitapların ve dergilerin ortak bir trait aracılığıyla kendilerini tanımlayabildiği bir katalog oluşturacaksın.

Kodunu üç dosyaya ayıracaksın:

  • catalog.rs: Tek bir yöntem olan ve CatalogItem döndüren description yöntemini içeren String trait'ini tanımla. Bu trait, tüm kütüphane öğelerinin yerine getirmesi gereken sözleşmeyi oluşturur.
  • items.rs: Trait'ini uygulayan iki struct oluştur. Bir Book (her ikisi de String olan) bir title ve author içerirken, bir Magazine bir name (String) ve issue numarası (u32) içerir. Her struct, kendine özgü açıklama biçimiyle CatalogItem'ı uygulamalıdır.
  • main.rs: Her iki modülü de içe aktar ve sağlanan girdileri kullanarak Book ve Magazine örnekleri oluştur. Her öğe üzerinde description yöntemini çağır ve sonuçları yazdır.

Book açıklaman şu biçimi izlemelidir:

Book: {title} by {author}

Magazine açıklaman şu biçimi izlemelidir:

Magazine: {name}, Issue {issue}

Örneğin, 1984, George Orwell, Nature ve 42 girdileriyle:

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

The Rust Book, Steve Klabnik, Science Weekly ve 156 girdileriyle:

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

Dört girdi alacaksın: kitap başlığı, kitap yazarı, dergi adı ve dergi sayı numarası (sonuncusunu u32 olarak ayrıştır).

Kendin dene

mod catalog;
mod items;

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

fn main() {
    // Girdileri oku
    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: book_title ve book_author kullanarak bir Book örneği oluştur

    // TODO: Create a Magazine instance using magazine_name and magazine_issue

    // TODO: Her öğede description() çağır ve sonuçları yazdır
}

Nesne Yönelimli Programlama bölümündeki tüm dersler

Kendi başına pratik yap: Online Rust derleyicisi