Menu
Coddy logo textTech

Birden Fazla Uygulama Bloğu

Coddy'nin Rust Journey'sinin Object Oriented Programming bölümünün bir parçası. Ders 5 / 61.

Rust, bir struct'ın yöntemlerini birden fazla impl bloğuna ayırmanıza olanak tanır. Her şey tek bir blokta yer alabilse de bunları ayırmak kodunuzu daha düzenli ve okunabilir hâle getirebilir.

İşlevselliği iki implementation bloğuna ayrılmış bir struct:

struct BankAccount {
    balance: f64,
}

// Yapıcı ve temel sorgular
impl BankAccount {
    fn new(initial: f64) -> BankAccount {
        BankAccount { balance: initial }
    }
    
    fn balance(&self) -> f64 {
        self.balance
    }
}

// İşlem metotları
impl BankAccount {
    fn deposit(&mut self, amount: f64) {
        self.balance += amount;
    }
    
    fn withdraw(&mut self, amount: f64) {
        self.balance -= amount;
    }
}

Her iki blok da sorunsuz bir şekilde birlikte çalışır: Rust bunları tek bir blokmuş gibi ele alır. Hangi blokta tanımlandığına bakmaksızın herhangi bir metodu çağırabilirsiniz:

fn main() {
    let mut account = BankAccount::new(100.0);
    account.deposit(50.0);
    println!("{}", account.balance()); // 150
}

Bu desen, struct'larınız büyüdükçe özellikle kullanışlı hâle gelir. Constructor'ları birlikte gruplayabilir, salt okunur methods'ları değişiklik yapan methods'lardan ayrı tutabilir veya özelliğe göre düzenleyebilirsiniz. Bir struct'ın sahip olabileceği impl block'larının sayısında sınır yoktur.

challenge icon

Görev

Kolay

İki alana sahip bir Player struct'ı oluştur: name (String) ve score (u32).

struct'ın yöntemlerini iki ayrı impl bloğu arasında düzenle:

First impl block: Constructor ve sorgu:

  • new: bir name: String alan ve score değeri 0 olarak ayarlanmış bir Player döndüren ilişkili bir fonksiyon
  • get_score: &self alan ve mevcut skoru u32 olarak döndüren fonksiyon

Second impl block: Skor değişiklikleri:

  • add_points: &mut self ve points: u32 alan, puanları skora ekleyen fonksiyon
  • reset_score: &mut self alan ve skoru tekrar 0 olarak ayarlayan fonksiyon

Üç girdi alacaksın:

  • İlk satır: oyuncunun adı (String)
  • İkinci satır: ilk round'da eklenecek puanlar (u32)
  • Üçüncü satır: ikinci round'da eklenecek puanlar (u32)

Player::new kullanarak bir oyuncu oluştur, ilk round puanlarını ekle, skoru yazdır, ardından skoru sıfırla, ikinci round puanlarını ekle ve final skoru yazdır.

Beklenen çıktı biçimi:

{score_after_first_round}
{score_after_reset_and_second_round}

Kendin dene

use std::io;

// TODO: Player struct'ını name (String) ve score (u32) alanlarıyla tanımla


// TODO: İlk impl bloğu - Yapıcı ve sorgu metotları (new, get_score)


// TODO: İkinci impl bloğu - Skor değiştirme metotları (add_points, reset_score)


fn main() {
    let mut input = String::new();
    
    // Oyuncu adını oku
    io::stdin().read_line(&mut input).expect("Failed to read line");
    let name = input.trim().to_string();
    
    // İlk tur puanlarını oku
    input.clear();
    io::stdin().read_line(&mut input).expect("Failed to read line");
    let first_round: u32 = input.trim().parse().expect("Invalid number");
    
    // İkinci tur puanlarını oku
    input.clear();
    io::stdin().read_line(&mut input).expect("Failed to read line");
    let second_round: u32 = input.trim().parse().expect("Invalid number");
    
    // TODO: Player::new kullanarak bir oyuncu oluştur
    // TODO: İlk tur puanlarını ekle ve skoru yazdır
    // TODO: Skoru sıfırla
    // TODO: İkinci tur puanlarını ekle ve final skoru yazdır
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Object Oriented Programming bölümündeki tüm dersler

Kendi başına pratik yap: Online Rust derleyicisi