मॉड्यूल पाठ (2/2)
पैटर्न मिलान, विकल्प और परिणाम
रस्ट में एक अत्यंत शक्तिशाली नियंत्रण प्रवाह तंत्र है जिसे पैटर्न मिलान कहा जाता है। यह आपको पैटर्न की एक श्रृंखला के विरुद्ध एक मान की तुलना करने और कौन से पैटर्न से मेल खाता है उसके आधार पर कोड निष्पादित करने की अनुमति देता है।
match कथन
रस्ट में match स्टेटमेंट अन्य भाषाओं में switch के समान है, लेकिन बहुत अधिक शक्तिशाली और सुरक्षित है। संकलक यह सुनिश्चित करता है कि मिलान विस्तृत है, जिसका अर्थ है कि सभी संभावित मामलों को संभाला जाना चाहिए:
enum Direction {
North,
South,
East,
West,
}
let dir = Direction::East;
match dir {
Direction::North => println!("Andiamo a Nord"),
Direction::South => println!("Andiamo a Sud"),
Direction::East => println!("Andiamo a Est"),
Direction::West => println!("Andiamo a Ovest"),
}मान की अनुपस्थिति को संभालना: Option
रस्ट में शून्य मान (null या nil) की अवधारणा नहीं है। इसके बजाय, मानक लाइब्रेरी Option<T> नामक एक एनम को परिभाषित करती है जिसमें ये शामिल हो सकते हैं:
Some(T): इसमेंTप्रकार का मान होता है।None: मूल्य की अनुपस्थिति को इंगित करता है।
let x: Option<i32> = Some(5);
let y: Option<i32> = None;
match x {
Some(val) => println!("C'e un valore: {}", val),
None => println!("Nessun valore trovato"),
}पुनर्प्राप्ति योग्य त्रुटियों को संभालना: Result
उन ऑपरेशनों के लिए जो विफल हो सकते हैं (जैसे किसी फ़ाइल को पढ़ना या किसी स्ट्रिंग को किसी संख्या में पार्स करना), रस्ट Result<T, E> एनम का उपयोग करता है, जिसके दो प्रकार हैं:
Ok(T): ऑपरेशन सफल हुआ और इसमें सफलता मानTशामिल है।Err(E): ऑपरेशन विफल रहा और इसमें त्रुटिEहै।
fn divide(numerator: f64, denominator: f64) -> Result<f64, String> {
if denominator == 0.0 {
Err(String::from("Divisione per zero!"))
} else {
Ok(numerator / denominator)
}
}रस्ट के कंपाइलर के लिए धन्यवाद, आपको Ok के अंदर मूल्य तक पहुंचने से पहले Err केस को संभालने के लिए मजबूर किया जाता है, जिससे कई सामान्य रनटाइम बग को रोका जा सकता है।
वाइल्डकार्ड पैटर्न _
बड़ी संख्या में वेरिएंट (जैसे पूर्णांक) वाले डेटा प्रकारों के साथ काम करते समय, सभी मामलों को match में सूचीबद्ध करना असंभव है। रस्ट स्पष्ट रूप से परिभाषित नहीं किए गए सभी शेष मामलों को पकड़ने के लिए वाइल्डकार्ड वर्ण _ का उपयोग करने की अनुमति देता है:
let some_u8 = 3u8;
match some_u8 {
1 => println!("One"),
2 => println!("Two"),
_ => println!("Something else"), // Handles all other values
}खुद कोशिश करना
कुछ (42) युक्त विकल्प <i32> प्रकार का may_value नामक एक वैरिएबल घोषित करें। might_value पर मिलान विवरण का उपयोग करें: यदि इसमें कुछ (v) प्रिंट है तो 'मूल्य है: v' (प्रिंटएलएन का उपयोग करके!), यदि इसमें कोई नहीं है तो 'कोई मूल्य नहीं' प्रिंट करें।
संकेत दिखाएँ
एक `मैच शायद_वैल्यू { कुछ(v) => println!('वैल्यू है: {}', v), कोई नहीं => println!('कोई वैल्यू नहीं') }` ब्लॉक लिखें।
3 प्रयासों के बाद समाधान उपलब्ध है
check_age फ़ंक्शन को पूरा करें ताकि यदि आयु 18 वर्ष से अधिक या उसके बराबर हो तो यह Ok('वयस्क') लौटाए और अन्यथा ERr('Minor') लौटाए।
संकेत दिखाएँ
यह तय करने के लिए कि 'ठीक('वयस्क')' या 'एरर('नाबालिग')' लौटाना है या नहीं, 'अगर उम्र >= 18' है तो 'अगर उम्र >= 18' है तो इसका उपयोग करें।
3 प्रयासों के बाद समाधान उपलब्ध है
स्टेटस नामक एक एनम घोषित करें जिसमें सक्रिय और निष्क्रिय वेरिएंट शामिल हों। मुख्य रूप से, स्थिति::सक्रिय मान के साथ एक वेरिएबल current_status घोषित करें। अंत में, यदि स्थिति सक्रिय है तो 'सक्रिय', या यदि स्थिति निष्क्रिय है तो 'निष्क्रिय' प्रिंट करने के लिए current_status पर मिलान विवरण का उपयोग करें।
संकेत दिखाएँ
मुख्य से पहले एनम को `एनम स्टेटस { सक्रिय, निष्क्रिय }`से परिभाषित करें। मुख्य रूप से,`let current_status = status::Active;`का उपयोग करें और वेरिएंट पर`मैच` करें।
3 प्रयासों के बाद समाधान उपलब्ध है