Menu
Coddy logo textTech

Varsayılanları Geçersiz Kılma

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

Varsayılan uygulamalar kullanışlıdır, ancak bazen bir türün standarttan farklı bir davranışa ihtiyacı olur. Bu durumda, impl bloğunda kendi uygulamanızı sağlayarak varsayılanı geçersiz kılabilirsiniz.

Yöntemi aynı imzayla tanımlayın, ancak özel mantığınızı ekleyin:

trait Greet {
    fn greet(&self) -> String {
        String::from("Hello there!")
    }
}

struct Robot {
    id: u32,
}

impl Greet for Robot {
    fn greet(&self) -> String {
        format!("BEEP BOOP. Unit {} online.", self.id)
    }
}

Greet varsayılan bir greet yöntemi sağlasa da Robot bunu tamamen kendi sürümüyle değiştirir. Bir Robot üzerinde greet() çağırdığınızda Rust özel uygulamayı kullanır:

let bot = Robot { id: 42 };
println!("{}", bot.greet());  // BEEP BOOP. Ünite 42 çevrimiçi.

Bu size esneklik sağlar: varsayılan davranıştan memnun olan türlerin herhangi bir şey yazmasına gerek yoktur; özel davranışa ihtiyaç duyan türler ise yalnızca ilgilendikleri yöntemleri geçersiz kılabilir. Trait, onu uygulayan her türün bu yönteme sahip olmasını yine de garanti eder.

challenge icon

Görev

Kolay

Farklı uyarı türlerinin mesajlarını özelleştirebildiği bir bildirim sistemi oluşturalım! Varsayılan bir uygulamaya sahip bir trait oluşturacak, ardından bir türün varsayılanı kullanmasını ve diğerinin bunu özel davranışla geçersiz kılmasını sağlayacaksın.

Kodunu üç dosyaya ayıracaksın:

  • notifiable.rs: Varsayılan uygulamaya sahip Notifiable metodunu içeren herkese açık bir notify(&self) -> String trait'i tanımla; bu varsayılan uygulama "Alert: Something happened!" döndürür.
  • alerts.rs: Trait'ini farklı şekillerde uygulayan iki herkese açık struct oluştur:
    • GenericAlert: varsayılan bildirimi kullanan bir birim struct'ı (boş impl bloğu)
    • UrgentAlert: herkese açık bir message alanına (String) sahip bir struct; varsayılanı geçersiz kılarak "URGENT: {message}" değerinin saklanan mesajı olduğu {message} ifadesini döndürür
  • main.rs: Modüllerini bir araya getir ve her iki davranışı göster. Sağlanan girdiyi kullanarak bir GenericAlert ve bir UrgentAlert oluştur, ardından bildirimlerini yazdır.

Buradaki temel fikir, GenericAlert'ın varsayılan uygulamadan ücretsiz olarak yararlanması, UrgentAlert'ın ise kendi impl bloğunda metodu tanımlayarak özelleştirilmiş sürümünü sağlamasıdır.

Çıktın şu biçimi izlemelidir:

Alert: Something happened!
URGENT: {message}

Örneğin, girdi Server is down! olduğunda:

Alert: Something happened!
URGENT: Server is down!

Bir girdi alacaksın: acil uyarının mesajı.

Kendin dene

mod notifiable;
mod alerts;

use alerts::{GenericAlert, UrgentAlert};
use notifiable::Notifiable;

fn main() {
    // Acil uyarı mesajı için girişi oku
    let mut input = String::new();
    std::io::stdin().read_line(&mut input).expect("Failed to read line");
    let message = input.trim().to_string();

    // TODO: Bir GenericAlert örneği oluştur

    // TODO: Girdi mesajıyla bir UrgentAlert örneği oluştur

    // TODO: GenericAlert'ten bildirimi yazdır

    // TODO: UrgentAlert'ten bildirimi 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