মডিউল পাঠ (2/2)
বৈশিষ্ট্য এবং বৈশিষ্ট্য সীমানা
বৈশিষ্ট্য একটি নির্দিষ্ট ধরণের আচরণের সংজ্ঞা দেয় যা অন্য প্রকারের সাথে ভাগ করতে পারে। অন্যান্য প্রোগ্রামিং ভাষার ইন্টারফেসের মতো একটি নির্দিষ্ট সাধারণ কার্যকারিতা বা ইন্টারফেসের প্রতিনিধিত্ব করে এমন পদ্ধতির একটি সেট সংজ্ঞায়িত করার জন্য আমরা বৈশিষ্ট্যগুলি ব্যবহার করতে পারি।
বৈশিষ্ট্যের সীমা আমাদের নির্দিষ্ট করার অনুমতি দেয় যে একটি জেনেরিক টাইপকে অবশ্যই একটি নির্দিষ্ট বৈশিষ্ট্য প্রয়োগ করতে হবে, এটি নিশ্চিত করে যে প্রয়োজনীয় পদ্ধতিগুলি কম্পাইলের সময়ে উপলব্ধ।
একটি বৈশিষ্ট্য সংজ্ঞায়িত এবং বাস্তবায়ন
একটি বৈশিষ্ট্যকে সংজ্ঞায়িত করার জন্য, আমরা trait কীওয়ার্ডটি ব্যবহার করি এবং তারপরে পদ্ধতিগুলির স্বাক্ষরগুলি অনুসরণ করি যা প্রয়োগকারী প্রকারগুলিকে অবশ্যই সংজ্ঞায়িত করতে হবে:
pub trait Summary {
fn summarize(&self) -> String;
}একটি কংক্রিট প্রকারে একটি বৈশিষ্ট্য বাস্তবায়ন করতে, আমরা সিনট্যাক্স ব্যবহার করি impl TraitName for TypeName:
pub struct NewsArticle {
pub headline: String,
pub content: String,
}
impl Summary for NewsArticle {
fn summarize(&self) -> String {
format!("{}", self.headline)
}
}বৈশিষ্ট্য সীমানা
জেনেরিক ফাংশন লেখার সময়, আমরা টাইপ প্যারামিটারগুলিকে সীমাবদ্ধ করতে পারি যাতে তারা একটি নির্দিষ্ট বৈশিষ্ট্য বাস্তবায়ন করে। আদর্শ সিনট্যাক্স হল <T: Trait>:
pub fn notify<T: Summary>(item: &T) {
println!("Notification: {}", item.summarize());
}বিকল্পভাবে, আরও জটিল স্বাক্ষরের জন্য, আমরা where ধারাটি ব্যবহার করতে পারি:
pub fn notify_advanced<T>(item: &T)
where
T: Summary
{
println!("Notification: {}", item.summarize());
}নিজে চেষ্টা করে দেখুন
অনুশীলনী 1: সংক্ষিপ্ত বৈশিষ্ট্য
সারাংশ নামে একটি বৈশিষ্ট্য সংজ্ঞায়িত করুন যেখানে পদ্ধতি স্বাক্ষর fn summarize(&self) -> String; এর পরে, স্ট্রিং টাইপের একটি শিরোনাম ক্ষেত্র সহ একটি struct NewsArticle সংজ্ঞায়িত করুন এবং এটির জন্য সারাংশ বৈশিষ্ট্য প্রয়োগ করুন যাতে সারসংক্ষেপ পদ্ধতিটি শিরোনাম ক্ষেত্রের মান প্রদান করে।
ইঙ্গিত দেখান
'সারাংশ' বৈশিষ্ট্য এবং 'নিউজ আর্টিকেল' গঠন সংজ্ঞায়িত করুন। NewsArticle ক্লোনিং দ্যা ফিল্ড`self.headline.clone()`এর জন্য`impl সারাংশ' দিয়ে প্রয়োগ করুন।
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ
অনুশীলনী 2: প্রিন্ট_সারাংশের সাথে বৈশিষ্ট্যের সীমানা
পূর্ববর্তী অনুশীলনের কোডের উপর ভিত্তি করে, print_summary<T> নামে একটি জেনেরিক ফাংশন সংজ্ঞায়িত করুন যা &T প্রকারের একটি প্যারামিটার আইটেম গ্রহণ করে। একটি বৈশিষ্ট্য আবদ্ধ প্রয়োগ করুন যাতে T-কে অবশ্যই সারাংশের বৈশিষ্ট্য বাস্তবায়ন করতে হবে। ফাংশনের ভিতরে, item.summarize() দ্বারা ফেরত ফলাফল প্রিন্ট করুন।
ইঙ্গিত দেখান
স্বাক্ষর ব্যবহার করুন `fn print_summary<T: Summary>(আইটেম: &T)`এবং`println!`-এর ভিতরে invoke`item.summarize()`।
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ
ব্যায়াম 3: বৈশিষ্ট্য ব্যবহার করে এলাকা গণনা
Fn area(&self) -> f64; পদ্ধতি দিয়ে এলাকা নামের একটি বৈশিষ্ট্য সংজ্ঞায়িত করুন। f64 টাইপের একটি ব্যাসার্ধ ক্ষেত্র সম্বলিত একটি struct সার্কেল তৈরি করুন এবং ক্ষেত্রফল (সূত্র: ব্যাসার্ধ * ব্যাসার্ধ * 3.14159) গণনা করে এটির জন্য এলাকা বৈশিষ্ট্য প্রয়োগ করুন।
ইঙ্গিত দেখান
'ক্ষেত্রফল' এবং 'বৃত্ত' গঠন সংজ্ঞায়িত করুন। বৃত্ত এলাকা সূত্র ব্যবহার করে `ক্ষেত্র (&self)` প্রয়োগ করুন।
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ