रस्ट में त्रुटियों को संभालने के एक से अधिक तरीके हैं, इसलिए सभी विकल्पों पर विचार करना सुनिश्चित करें।

त्रुटियाँ अपरिहार्य हैं और विभिन्न कारणों से हो सकती हैं, अमान्य उपयोगकर्ता इनपुट से लेकर नेटवर्क विफलताओं, हार्डवेयर की खराबी या प्रोग्रामिंग बग तक। त्रुटि प्रबंधन प्रोग्राम क्रैश या डेटा भ्रष्टाचार को रोकने के लिए ऐसी त्रुटियों का पता लगाने, रिपोर्ट करने और पुनर्प्राप्त करने की प्रक्रिया है।

रस्ट में प्रभावी त्रुटि प्रबंधन महत्वपूर्ण है। यह आपको मजबूत, विश्वसनीय एप्लिकेशन बनाने देता है जो अनपेक्षित त्रुटियों और विफलताओं को संभाल सकता है। रस्ट के एरर-हैंडलिंग मैकेनिज्म आपको लचीले, सुरक्षित प्रोग्राम विकसित करने देते हैं जिन्हें बनाए रखना आसान है।

जंग में त्रुटियों के प्रकार

जंग में एक समृद्ध प्रकार की प्रणाली है जिसका आप उपयोग कर सकते हैं त्रुटियों को कुशलता से संभालें, उनके प्रकार के अनुसार। पारंपरिक एरर-हैंडलिंग दृष्टिकोणों पर रस्ट की समृद्ध त्रुटि-प्रकार प्रणाली के लाभों को नहीं समझा जा सकता है। त्रुटि प्रकार प्रणाली प्रदान करती है बेहतर प्रकार की सुरक्षा, संयोजनीयता, अभिव्यक्तता और डिबगैबिलिटी।

instagram viewer

यहाँ रस्ट में सामान्य त्रुटि प्रकारों की सूची दी गई है:

  • एसटीडी:: आईओ:: त्रुटि प्रकार I/O त्रुटियों का प्रतिनिधित्व करता है जैसे फ़ाइल नहीं मिली, अनुमति अस्वीकार कर दी गई, या अंत-फ़ाइल पहुंच गई।
  • एसटीडी:: संख्या:: ParseIntError प्रकार त्रुटियों का प्रतिनिधित्व करता है जो स्ट्रिंग से पूर्णांक पार्सिंग ऑपरेशंस होते हैं।
  • एसटीडी:: विकल्प:: कोई त्रुटि नहीं प्रकार खाली विकल्पों को खोलने से त्रुटियों का प्रतिनिधित्व करता है।
  • एसटीडी:: परिणाम:: परिणाम प्रकार एक सामान्य परिणाम प्रकार है जिसका उपयोग आप किसी भी त्रुटि का प्रतिनिधित्व करने के लिए कर सकते हैं।

विशिष्ट तरीकों से इसे संभालने के लिए प्रत्येक त्रुटि प्रकार के तरीकों और लक्षणों का अपना सेट होता है।

फ़ाइल रीडिंग ऑपरेशन के लिए रस्ट में त्रुटि से निपटने का एक उदाहरण यहां दिया गया है:

उपयोग एसटीडी:: एफएस:: फ़ाइल;
उपयोग एसटीडी:: आईओ:: पढ़ें;

fnread_file(पथ: &एसटीआर) -> परिणाम<डोरी, एसटीडी:: आईओ:: त्रुटि> {
होने देनामुठ फ़ाइल = फ़ाइल:: खुला (पथ) ?;
होने देनामुठ सामग्री = डोरी::नया();
file.read_to_string(&मुठ सामग्री)?;
ठीक(सामग्री)
}

read_file फ़ंक्शन फ़ाइल की सामग्री को निर्दिष्ट पथ में पढ़ता है और इसे एक स्ट्रिंग के रूप में लौटाता है। यह एक देता है एसटीडी:: आईओ:: त्रुटि यदि फ़ाइल खुली या पढ़ी गई कार्रवाई विफल हो जाती है। ? ऑपरेटर त्रुटि का प्रचार करता है और त्रुटि को एक के रूप में लौटाता है परिणाम.

जंग में तंत्र से निपटने में त्रुटि

रस्ट की सुरक्षा में योगदान देने वाली एक प्रमुख विशेषता इसका एरर-हैंडलिंग मैकेनिज्म है। रस्ट में चार मुख्य एरर-हैंडलिंग मैकेनिज्म हैं: द परिणाम लिखें विकल्प लिखें घबड़ाहट! मैक्रो, और गलती प्रवृत्ति।

परिणाम और विकल्प प्रकार संरचित त्रुटि से निपटने की अनुमति देते हैं। आप आतंक का उपयोग कर सकते हैं! अप्राप्य त्रुटियों को संभालने के लिए मैक्रो। त्रुटि विशेषता आपको कस्टम त्रुटि प्रकार और कस्टम त्रुटि प्रबंधन को परिभाषित करने देती है।

परिणाम प्रकार

परिणाम प्रकार एक अंतर्निहित प्रकार है जो किसी ऑपरेशन के परिणाम का प्रतिनिधित्व करता है जो विफल हो सकता है। इसके दो वेरिएंट हैं: द ठीक संस्करण, जो सफलता का प्रतिनिधित्व करता है और इसमें एक मूल्य होता है, और ग़लती होना, जो विफलता का प्रतिनिधित्व करता है और इसमें एक त्रुटि मान होता है।

यहां बताया गया है कि आप किसी फ़ाइल को खोलने और उसकी सामग्री को पढ़ने के लिए परिणाम प्रकार का उपयोग कैसे कर सकते हैं:

उपयोग एसटीडी:: एफएस:: फ़ाइल;
उपयोग एसटीडी:: आईओ:: प्रस्तावना:: *;

fnread_file(दस्तावेज पथ: &एसटीआर) -> परिणाम<डोरी, एसटीडी:: आईओ:: त्रुटि> {
होने देनामुठ फ़ाइल = फ़ाइल:: खुला (file_path) ?;
होने देनामुठ सामग्री = डोरी::नया();
file.read_to_string(&मुठ सामग्री)?;
ठीक(सामग्री)
}

fnमुख्य() {
होने देना परिणाम = read_file ("file.txt");

मिलान परिणाम {
ठीक(सामग्री) => प्रिंटल!("{}", सामग्री),
ग़लती होना(ई) => प्रिंटल!("गलती: {}", इ),
}
}

read_file फ़ंक्शन फ़ाइल पथ लेता है और a देता है परिणाम गलती। यदि फ़ाइल रीड या ओपन ऑपरेशन विफल हो जाता है, तो फ़ंक्शन वापस आ जाता है ग़लती होना कीमत। अन्यथा, फ़ंक्शन लौटाता है ठीक कीमत। में मुख्य कार्य, द मिलान बयान संभालती है परिणाम मूल्य और फ़ाइल संचालन की स्थिति के आधार पर परिणाम प्रिंट करता है।

विकल्प प्रकार

विकल्प प्रकार एक अंतर्निहित प्रकार है जो मूल्य की उपस्थिति या अनुपस्थिति का प्रतिनिधित्व करता है। विकल्प प्रकार के दो प्रकार हैं। कुछ एक मूल्य का प्रतिनिधित्व करता है, और कोई नहीं एक मूल्य की अनुपस्थिति का प्रतिनिधित्व करता है।

यहां बताया गया है कि आप कैसे उपयोग कर सकते हैं विकल्प वेक्टर के पहले तत्व को पुनः प्राप्त करने के लिए टाइप करें।

fnget_first_elementक्लोन>(वीसी: वी.ई.सी) -> विकल्प {
अगर vec.is_empty () {
कोई नहीं
} अन्य {
कुछ(vec.first().unwrap().clone())
}
}

fnमुख्य() {
होने देना वीईसी = वीसी![1, 2, 3];
होने देना परिणाम = get_first_element (vec);

मिलान परिणाम {
कुछ(तत्व) => प्रिंटल!("{}", तत्व),
कोई नहीं => प्रिंटल!("वेक्टर खाली है।"),
}
}

get_first_element समारोह एक देता है विकल्प प्रकार। यदि वेक्टर खाली है, तो फ़ंक्शन वापस आ जाता है कोई नहीं; अन्यथा, फ़ंक्शन वापस आ जाता है कुछ वेक्टर का पहला तत्व युक्त। में मुख्य कार्य, द मिलान बयान संभालती है विकल्प कीमत। अगर विकल्प का मूल्यांकन करता है कुछ, फ़ंक्शन पहले तत्व को प्रिंट करता है। अन्यथा, फ़ंक्शन एक संदेश प्रिंट करता है जो इंगित करता है कि वेक्टर खाली है।

दहशत! मैक्रो

घबड़ाहट! मैक्रो रस्ट में अप्राप्य त्रुटियों से निपटने के लिए कार्यक्षमता प्रदान करता है। कॉल करने पर घबड़ाहट! मैक्रो, यह एक त्रुटि संदेश प्रिंट करता है और प्रोग्राम को समाप्त कर देता है।

यहाँ पैनिक का उपयोग करने का एक उदाहरण है! मैक्रो यह इंगित करने के लिए कि किसी फ़ंक्शन में अमान्य तर्क हैं।

fnविभाजित करना(लाभांश: f64, भाजक: f64) -> f64 {
अगर भाजक == 0.0 {
घबड़ाहट!("भाजक शून्य नहीं हो सकता।");
}

लाभांश / भाजक
}

fnमुख्य() {
होने देना परिणाम = विभाजित (4.0, 0.0);
प्रिंटल!("{}", परिणाम);
}

विभाजित करना फ़ंक्शन जाँचता है कि भाजक शून्य है या नहीं; यदि विभाजक शून्य है, तो फ़ंक्शन कॉल करता है घबड़ाहट! मैक्रो एक त्रुटि संदेश के साथ; अन्यथा, फ़ंक्शन गणना करता है और परिणाम देता है

मुख्य फ़ंक्शन डिवाइड फ़ंक्शन को ट्रिगर करने के लिए अमान्य तर्कों के साथ कॉल करता है घबड़ाहट! मैक्रो।

यहाँ त्रुटि संदेश है:

त्रुटि विशेषता

गलती विशेषता एक अंतर्निहित विशेषता है जो त्रुटि प्रकारों के व्यवहार को परिभाषित करती है। गलती विशेषता कस्टम त्रुटि प्रकार और कस्टम त्रुटि प्रबंधन को परिभाषित करने के लिए कार्यक्षमता प्रदान करती है।

यहाँ एक कस्टम त्रुटि प्रकार को परिभाषित करने का एक उदाहरण दिया गया है जो एक फ़ाइल नहीं मिली त्रुटि का प्रतिनिधित्व करता है।

उपयोग एसटीडी:: त्रुटि:: त्रुटि;
उपयोग एसटीडी:: एफएमटी;
उपयोग एसटीडी:: आईओ:: पढ़ें;

#[व्युत्पन्न (डीबग)]
structफ़ाइल प्राप्त नहीं हुई(डोरी);

प्रत्यय एफएमटी:: प्रदर्शन के लिए फ़ाइल प्राप्त नहीं हुई {
fnfmt(&खुद, एफ: &मुठ fmt:: Formatter) -> fmt::परिणाम {
लिखना!(एफ, "फ़ाइल प्राप्त नहीं हुई: {}", खुद.0)
}
}

प्रत्यय गलती के लिए फ़ाइल प्राप्त नहीं हुई {}

fnread_file(दस्तावेज पथ: &एसटीआर) -> परिणाम<डोरी, डिब्बा<डाइन त्रुटि >> {
होने देनामुठ फ़ाइल = एसटीडी:: एफएस:: फ़ाइल:: खुला (file_path).map_err (| ई | FileNotFound (प्रारूप!("{}", इ)))?;
होने देनामुठ सामग्री = डोरी::नया();
file.read_to_string(&मुठ सामग्री)?;
ठीक(सामग्री)
}

fnमुख्य() {
होने देना परिणाम = read_file ("file.txt");

मिलान परिणाम {
ठीक(सामग्री) => प्रिंटल!("{}", सामग्री),
ग़लती होना(ई) => प्रिंटल!("गलती: {}", इ),
}
}

कस्टम त्रुटि प्रकार है फ़ाइल प्राप्त नहीं हुई संरचना। प्रकार में एक फ़ाइल पथ होता है, और फ़ाइल प्राप्त नहीं हुई प्रकार लागू करता है दिखाना उपयोगकर्ता के अनुकूल त्रुटि संदेशों को वापस करने के लिए विशेषता और गलती विशेषता यह इंगित करने के लिए कि यह एक त्रुटि प्रकार है।

में read_file कार्य, द फ़ाइल प्राप्त नहीं हुई त्रुटि प्रकार एक फ़ाइल नहीं मिली त्रुटि का प्रतिनिधित्व करता है, और map_err विधि std:: io:: त्रुटि को FileNotFound त्रुटि में परिवर्तित करती है। आखिरकार, डिब्बा प्रकार फ़ंक्शन को त्रुटि विशेषता लागू करने वाले किसी भी प्रकार को वापस करने की अनुमति देता है।

मुख्य फ़ंक्शन कॉल करता है read_file फ़ाइल पथ के साथ कार्य करता है और, यदि यह फ़ाइल पाता है, तो इसकी सामग्री को कंसोल पर प्रिंट करता है। अन्यथा, यह त्रुटि संदेश प्रिंट करता है।

यह उस फ़ाइल के लिए परिणाम है जो मौजूद नहीं है:

आप प्रोग्राम सुरक्षा के लिए रस्ट के स्वामित्व मॉडल पर भरोसा कर सकते हैं

रस्ट के शानदार एरर-हैंडलिंग मैकेनिज्म के साथ, रस्ट एक स्वामित्व मॉडल का भी उपयोग करता है जो यह सुनिश्चित करने में मदद करता है कि आपके प्रोग्राम मेमोरी सुरक्षित हैं।

जंग आपके कार्यक्रम के चलने से पहले संकलन समय पर उधार चेकर के साथ स्वामित्व नियमों को सुनिश्चित करता है।