Menu
Coddy logo textTech

Where Cümleciği

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

Daha fazla trait sınırı ekledikçe, işlev imzalarını okumak zorlaşabilir. Her biri birkaç trait gerektiren birden çok genel parametreye sahip bir işlevi düşünün:

fn complex_operation<T: Display + Clone, U: Debug + Summary>(first: T, second: U) {
    // ...
}

Bu çalışır, ancak imza giderek karmaşıklaşıyor. where yan tümcesi, özellik sınırlarını parametre listesinden sonra taşıyarak daha temiz bir alternatif sunar:

fn complex_operation<T, U>(first: T, second: U)
where
    T: Display + Clone,
    U: Debug + Summary,
{
    // ...
}

Her iki sürüm de işlevsel olarak aynıdır: where yan tümcesi yalnızca okunabilirlikle ilgilidir. Her türün gereksinimleri kendi satırında yer alır; böylece her genel tür parametresinin neye ihtiyaç duyduğunu tarayarak görmek kolaylaşır.

where yan tümcesi, sınırlar karmaşık olduğunda veya çok sayıda genel parametreye sahip olduğunuzda özellikle değerli hâle gelir. İşlev adını ve parametreleri bir bakışta görünür tutar; kısıtlamalar ise aşağıda ayrı olarak listelenir. Sınırlar basit bir T: Trait ifadesinin ötesine geçtiğinde, çoğu Rust kod tabanında tercih edilen stil budur.

challenge icon

Görev

Kolay

Karmaşık trait sınırlarını okunabilir tutmak için where yan tümcesini kullanan bir veri işleme sistemi oluşturalım! Birden çok tür parametresine sahip genel bir işlev oluşturacak, her biri farklı trait'ler gerektirecek ve sınırları where söz dizimini kullanarak düzenli bir şekilde organize edeceksin.

Kodunu iki dosyaya ayıracaksın:

  • processor.rs: İki public trait ve her ikisini de kullanan genel bir işlev tanımla:
    • Summarize: summary alan ve &self döndüren bir String metoduna sahip bir trait
    • Validate: validate alan ve &self döndüren bir bool metoduna sahip bir trait
    Ardından, iki farklı genel türde parametre kabul eden ve process_items adlı bir public genel işlev oluştur. Birinci türün hem where hem de Clone uygulaması, ikinci türün ise Summarize uygulaması gerektiğini belirtmek için bir Validate yan tümcesi kullan. İşlev, önce birinci öğenin özetini, ardından ikinci öğenin geçerli olup olmadığını yazdırmalıdır.
  • main.rs: Gerekli trait'leri uygulayan iki public struct oluştur:
    • Article: public bir title alanına (String) sahip olsun. Summarize döndürecek şekilde Article: {title} uygulansın ve Clone türetilebilsin.
    • Form: public bir filled alanına (bool) sahip olsun. Validate uygulanarak filled değerini döndürsün.
    Sağlanan girdileri kullanarak bir Article ve bir Form oluştur, ardından her ikisiyle process_items işlevini çağır.

where yan tümcesi, tüm sınırları köşeli parantezlerin içine sıkıştırmaya kıyasla işlev imzasını çok daha temiz hâle getirir. Her türün gereksinimleri kendi satırında yer alır; böylece her genel parametrenin neye ihtiyaç duyduğunu görmek kolaylaşır.

Çıktın, özeti ve ardından doğrulama sonucunu göstermelidir:

Article: {title}
Valid: {true/false}

Örneğin, Rust Tips ve true girdileriyle:

Article: Rust Tips
Valid: true

Breaking News ve false girdileriyle:

Article: Breaking News
Valid: false

İki girdi alacaksın: makale başlığı ve formun doldurulup doldurulmadığı ( bool olarak ayrıştır).

Kendin dene

mod processor;

use processor::{Summarize, Validate, process_items};
use std::io;

// TODO: public title alanı (String) olan public bir Article struct'ı tanımla
// Article için Clone derive et

// TODO: Article için Summarize'ı implement et
// summary metodu "Article: {title}" döndürmeli

// TODO: public filled alanı (bool) olan public bir Form struct'ı tanımla

// TODO: Form için Validate'i implement et
// validate metodu filled değerini döndürmeli

fn main() {
    let mut title = String::new();
    io::stdin().read_line(&mut title).expect("Failed to read line");
    let title = title.trim().to_string();

    let mut filled_input = String::new();
    io::stdin().read_line(&mut filled_input).expect("Failed to read line");
    let filled: bool = filled_input.trim().parse().expect("Failed to parse bool");

    // TODO: verilen title ile bir Article oluştur
    
    // TODO: verilen filled değeri ile bir Form oluştur
    
    // TODO: process_items'ı article ve form ile çağı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