Menu
Coddy logo textTech

Varsayılan Uygulamalar

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

Şimdiye kadar tanımladığımız her özellik yöntemi yalnızca bir imzaydı: gövdesi olmayan bir gereksinim. Peki ya bir özelliği uygulayan türlerin çoğu aynı mantığı kullanacaksa? Rust, özelliğin tanımı içinde doğrudan bir varsayılan uygulama sağlamanıza olanak tanır.

Yöntem imzasını noktalı virgülle sonlandırmak yerine bir gövde eklersin:

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

Artık Greet uygulayan herhangi bir tür, impl bloğuna herhangi bir kod yazmadan bu metodu otomatik olarak edinir:

struct Guest;

impl Greet for Guest {}

let visitor = Guest;
println!("{}", visitor.greet());  // Merhaba!

Boş impl Greet for Guest {} geçerlidir çünkü trait davranışı zaten sağlar. Struct, trait’i basitçe "kullanmayı seçer" ve varsayılan metodu ücretsiz olarak alır.

Bu kalıp, çoğu durum için çalışan ortak davranışı define etmek istediğinizde kullanışlıdır. Farklı bir şeye ihtiyaç duyan türler default olanı (bunu bir sonraki bölümde öğreneceksiniz) geçersiz kılabilirken standart davranıştan memnun olan türlerin kendilerini tekrar etmesine gerek yoktur.

challenge icon

Görev

Kolay

Bir bildirim sistemi oluşturarak varsayılan uygulamaların gücünü keşfedelim! Kutudan çıktığı hâliyle standart davranış sağlayan bir trait oluşturacaksın; böylece türler tekrarlayan kodlar yazmadan bu davranışı kullanmayı seçebilecek.

Kodunu üç dosya arasında düzenleyeceksin:

  • notifiable.rs: Bir Notifiable metoduna sahip, varsayılan bir uygulama sağlayan herkese açık bir notify(&self) -> String trait'i tanımla. Varsayılan uygulama "You have a new notification!" döndürmeli. Bu trait'i uygulayan her tür, impl bloğuna herhangi bir şey yazmaya gerek kalmadan bu davranışı otomatik olarak alır.
  • alerts.rs: Trait'ini uygulayan iki basit, herkese açık birim struct'ı oluştur:
    • EmailAlert: boş bir impl bloğuyla Notifiable uygular (varsayılanı kullanır)
    • SystemAlert: yine boş bir impl bloğuyla Notifiable uygular (varsayılanı kullanır)
    Her iki struct da herhangi bir metot gövdesi yazmana gerek kalmadan varsayılan bildirim mesajını otomatik olarak alır!
  • main.rs: Modüllerini bir araya getir ve her iki uyarı türünün aynı varsayılan davranışı nasıl paylaştığını göster. Her iki struct'ın örneklerini oluştur ve notify metotlarını çağır.

Ana dosyanda bir EmailAlert ve bir SystemAlert oluştur, ardından bildirimlerini ayrı satırlara yazdır.

Çıktın şöyle olmalı:

You have a new notification!
You have a new notification!

Her iki türün de aynı çıktıyı ürettiğine dikkat et: varsayılan uygulamaların güzelliği işte bu! Her iki struct'ın da notify metodu için herhangi bir kod yazması gerekmedi, ancak ikisi de tamamen işlevsel bildirim davranışına sahip. Bir sonraki derste, bir tür özel davranışa ihtiyaç duyduğunda bu varsayılanları nasıl geçersiz kılacağını öğreneceksin.

Kendin dene

mod notifiable;
mod alerts;

use notifiable::Notifiable;
use alerts::{EmailAlert, SystemAlert};

fn main() {
    // TODO: EmailAlert örneği oluştur
    
    // TODO: SystemAlert örneği oluştur
    
    // TODO: Print the notification from EmailAlert
    
    // TODO: Print the notification from SystemAlert
}
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