Menu
Coddy logo textTech

Birden Fazla Uygulama Bloğu

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

Rust, bir yapının yöntemlerini birden fazla impl bloğuna bölmenize 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 uygulama bloğuna ayrılmış bir yapı aşağıda verilmiştir:

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, yapılarınız büyüdükçe özellikle kullanışlı hâle gelir. Oluşturucuları birlikte gruplandırabilir, salt okunur yöntemleri değişiklik yapanlardan ayrı tutabilir veya özelliğe göre düzenleyebilirsiniz. Bir yapının sahip olabileceği impl bloklarının sayısında sınır yoktur.

challenge icon

Görev

Kolay

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

Yapının metotlarını iki ayrı uygulama bloğunda düzenle:

İlk impl bloğu: Oluşturucu ve sorgu:

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

İkinci impl bloğu: Skor değişiklikleri:

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

Üç girdi alacaksın:

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

Player::new kullanarak bir oyuncu oluştur, ilk tur puanlarını ekle, skoru yazdır, ardından skoru sıfırla, ikinci tur puanlarını ekle ve final skorunu 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.

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

Kendi başına pratik yap: Online Rust derleyicisi