मॉड्यूल पाठ (1/2)
जेनेरिक और फ़ंक्शंस
जेनेरिक्स आपको विभिन्न डेटा प्रकारों के लिए तर्क के दोहराव से बचने के लिए लचीला, पुन: प्रयोज्य कोड लिखने की अनुमति देता है। विभिन्न प्रकारों (जैसे i32, f64, या String) के लिए कई कार्यों या संरचनाओं को परिभाषित करने के बजाय, हम एक सामान्य प्रकार के पैरामीटर का उपयोग कर सकते हैं, जिसे पारंपरिक रूप से अक्षर T द्वारा दर्शाया जाता है।
रस्ट कंपाइलर मोनोमॉर्फाइज़ेशन नामक प्रक्रिया का उपयोग करके जेनेरिक का प्रबंधन करता है: संकलन के दौरान, यह वास्तव में उपयोग किए जाने वाले प्रत्येक ठोस प्रकार के लिए जेनेरिक कोड की एक प्रति उत्पन्न करता है। इसका मतलब है कि शून्य रनटाइम प्रदर्शन ओवरहेड है।
सामान्य कार्य
एक सामान्य फ़ंक्शन को परिभाषित करने के लिए, हम फ़ंक्शन नाम के ठीक बाद और तर्क सूची से पहले टाइप पैरामीटर <T> डालते हैं:
fn print_value<T: std::fmt::Debug>(value: T) {
println!("Value: {:?}", value);
}सामान्य कार्यों में, हम तर्क प्रकार और रिटर्न प्रकार दोनों के लिए सामान्य प्रकार T का उपयोग कर सकते हैं:
fn identity<T>(value: T) -> T {
value
}सामान्य संरचनाएँ
हम लचीले क्षेत्रों को परिभाषित करने के लिए संरचनाओं (struct) के अंदर सामान्य प्रकार के मापदंडों का भी उपयोग कर सकते हैं:
struct KeyValuePair<K, V> {
key: K,
value: V,
}
fn main() {
let pair = KeyValuePair {
key: String::from("age"),
value: 30,
};
}एक सामान्य संरचना के लिए impl ब्लॉक में, हमें impl कीवर्ड के तुरंत बाद टाइप पैरामीटर <T> घोषित करना होगा ताकि यह दर्शाया जा सके कि हम एक सामान्य संरचना पर तरीकों को लागू कर रहे हैं:
struct Container<T> {
value: T,
}
impl<T> Container<T> {
fn new(value: T) -> Self {
Container { value }
}
fn value(&self) -> &T {
&self.value
}
}खुद कोशिश करना
अभ्यास 1: बिंदु संरचना
प्वाइंट<टी> नामक एक सामान्य संरचना को दो फ़ील्ड के साथ परिभाषित करें: प्रकार टी का एक्स और प्रकार टी का वाई। मुख्य फ़ंक्शन में, पूर्णांक मान x = 5 और y = 10 के साथ एक बिंदु वाले एक चर बिंदु को तुरंत चालू करें, फिर बिंदु.x का मान प्रिंट करें।
संकेत दिखाएँ
`struct प्वाइंट<T> { x: T, y: T }`का उपयोग करके संरचना की घोषणा करें। इसे मुख्य रूप से इंस्टेंट करें और इसे प्रिंट करने के लिए`point.x` का उपयोग करें।
3 प्रयासों के बाद समाधान उपलब्ध है
व्यायाम 2: स्वैप के साथ टुपल को उलटना
स्वैप<टी> नामक एक सामान्य फ़ंक्शन लिखें जो दो तत्वों (टी, टी) के टुपल को स्वीकार करता है और उनकी स्थिति को उलट कर एक नया टुपल (टी, टी) लौटाता है। मुख्य फ़ंक्शन में, फ़ंक्शन को टुपल (1, 2) के साथ कॉल करें और परिणाम प्रिंट करें।
संकेत दिखाएँ
फ़ंक्शन हस्ताक्षर `एफएन स्वैप<टी>(जोड़ी: (टी, टी)) -> (टी, टी)`होना चाहिए। उलटे टपल को`(pair.1, जोड़े.0)` के साथ लौटाएँ।
3 प्रयासों के बाद समाधान उपलब्ध है
अभ्यास 3: कंटेनर संरचना
एक सामान्य संरचना कंटेनर<T> को परिभाषित करें जिसमें प्रकार T का मान फ़ील्ड हो। एक नई विधि को परिभाषित करने के लिए एक सामान्य impl ब्लॉक लागू करें जो प्रकार T का मान स्वीकार करता है और कंटेनर<T> का एक उदाहरण देता है।
संकेत दिखाएँ
संबंधित विधि को कार्यान्वित करने के लिए `impl<T> Container<T>` का उपयोग करें`fn new(value: T) -> Self { Container { value } }`।
3 प्रयासों के बाद समाधान उपलब्ध है