۹

مفاهیم پیشرفته

آشنایی با Generics, Traits و Lifetimes برای نوشتن کدهای انعطاف‌پذیر.

Generics: کدهای همه‌کاره

Genericها بهمون اجازه می‌دن کدهایی بنویسیم که روی انواع داده مختلفی کار کنن، بدون اینکه کد رو تکرار کنیم.

// یک تابع generic که بزرگترین عضو یک لیست رو پیدا می‌کنه
// T می‌تونه هر نوعی باشه که قابلیت مقایسه شدن رو داشته باشه
fn largest<T: PartialOrd + Copy>(list: &[T]) -> T {
    let mut largest = list[0];
    for &item in list {
        if item > largest {
            largest = item;
        }
    }
    largest
}

Traits: تعریف رفتار مشترک

Traitها شبیه Interfaceها در زبان‌های دیگه هستن. باهاشون می‌تونیم یه سری رفتار (متد) مشترک رو تعریف کنیم و بعد هر `struct` یا `enum`ای که خواست، می‌تونه اون رفتار رو پیاده‌سازی کنه.

pub trait Summary {
    fn summarize(&self) -> String;
}

pub struct NewsArticle {
    pub headline: String,
    pub author: String,
}

// پیاده‌سازی Trait برای Struct
impl Summary for NewsArticle {
    fn summarize(&self) -> String {
        format!("{}, by {}", self.headline, self.author)
    }
}