Menu
Coddy logo textTech

Metot Zincirleme

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

Şimdiye kadar, değiştirilebilir metotlarımız yapıyı değiştirdi ve hiçbir şey döndürmedi. Peki aynı örnek üzerinde art arda birkaç metot çağırmak istersek ne olacak? self öğesine bir başvuru döndürerek metot zincirleme özelliğini etkinleştiririz: birden fazla metot çağrısının tek bir ifade içinde birbirine bağlandığı bir kalıp.

Önemli olan, &mut self yöntemlerinizin &mut Self döndürmesini sağlamaktır:

struct Config {
    debug: bool,
    timeout: u32,
}

impl Config {
    fn new() -> Config {
        Config { debug: false, timeout: 30 }
    }
    
    fn set_debug(&mut self, value: bool) -> &mut Self {
        self.debug = value;
        self
    }
    
    fn set_timeout(&mut self, seconds: u32) -> &mut Self {
        self.timeout = seconds;
        self
    }
}

Her yöntem yapıyı değiştirir, ardından self değerini döndürür: aynı örneğe geri dönen değiştirilebilir bir başvuru. Bu, bir sonraki yöntem çağrısının hemen onun üzerinde çalışmaya devam etmesini sağlar:

fn main() {
    let mut config = Config::new();
    
    config.set_debug(true).set_timeout(60);
    
    println!("Debug: {}, Timeout: {}", config.debug, config.timeout);
    // Çıktı: Debug: true, Timeout: 60
}

Üç ayrı ifade yazmak yerine, her şeyi tek bir akıcı satırda yapılandırıyoruz. Bu "oluşturucu tarzı" kalıp, özellikle çok sayıda isteğe bağlı ayara sahip nesneleri kurarken kullanışlıdır ve kodunuzu daha kısa ve okunabilir hâle getirir.

challenge icon

Görev

Kolay

Üç alanı olan bir TextStyle yapısı oluştur: bold (bool), italic (bool) ve size (u32).

TextStyle için aşağıdakileri içeren bir uygulama bloğu ekle:

  • new: bold değeri false, italic değeri false ve size değeri 12 olarak ayarlanmış bir TextStyle döndüren ilişkili bir işlev
  • set_bold: &mut self ve bir bool değeri alır, bold alanını ayarlar ve zincirleme kullanım için &mut Self döndürür
  • set_italic: &mut self ve bir bool değeri alır, italic alanını ayarlar ve zincirleme kullanım için &mut Self döndürür
  • set_size: &mut self ve bir u32 değeri alır, size alanını ayarlar ve zincirleme kullanım için &mut Self döndürür

Üç girdi alacaksın:

  • İlk satır: kalın ayarı (true veya false)
  • İkinci satır: italik ayarı (true veya false)
  • Üçüncü satır: yazı tipi boyutu (u32)

new kullanarak değiştirilebilir bir TextStyle oluştur, ardından tek bir ifadede üç ayarın tümünü uygulamak için yöntem zincirleme kullan. Son durumu aşağıda gösterilen biçimde yazdır.

Beklenen çıktı biçimi:

Bold: {bold}, Italic: {italic}, Size: {size}

Kendin dene

use std::io;

// TODO: TextStyle struct'ını burada tanımla


// TODO: TextStyle için şu öğelerle implementation bloğunu ekle:
// - new() associated function
// - set_bold() method
// - set_italic() method
// - set_size() method


fn main() {
    let mut input = String::new();
    
    // Bold ayarını oku
    io::stdin().read_line(&mut input).expect("Failed to read line");
    let bold: bool = input.trim().parse().expect("Invalid bool");
    input.clear();
    
    // Italic ayarını oku
    io::stdin().read_line(&mut input).expect("Failed to read line");
    let italic: bool = input.trim().parse().expect("Invalid bool");
    input.clear();
    
    // Size ayarını oku
    io::stdin().read_line(&mut input).expect("Failed to read line");
    let size: u32 = input.trim().parse().expect("Invalid u32");
    
    // TODO: new() kullanarak mutable bir TextStyle oluştur, ardından method chaining kullan
    // üç ayarın hepsini tek bir ifadede uygulamak için
    
    
    // TODO: Sonucu şu formatta yazdır: Bold: {bold}, Italic: {italic}, Size: {size}
    
}
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