۹
مفاهیم پیشرفته
آشنایی با 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)
}
}