Haskell:
एरर्स को हैंडल करना
कैसे करें:
Haskell Maybe
और Either
जैसे टाइपों के जरिए मजबूती से त्रुटियों को संभालता है। यहाँ एक त्वरित नज़र:
safeDivide :: Integral a => a -> a -> Maybe a
safeDivide _ 0 = Nothing -- शून्य से भाग देना नहीं होता, इसलिए हम Nothing लौटाते हैं।
safeDivide x y = Just (x `div` y) -- अन्यथा, हम सब ठीक हैं, परिणाम Just में लौटाएं।
-- इसे कार्रवाई में देखें:
example1 :: Maybe Int
example1 = safeDivide 10 2 -- Just 5
example2 :: Maybe Int
example2 = safeDivide 10 0 -- Nothing
अधिक जटिल त्रुटि संभालने के लिए, Either
का उपयोग होता है:
safeDivideEither :: Integral a => a -> a -> Either String a
safeDivideEither _ 0 = Left "Divide by zero error." -- इस बार, त्रुटि एक सन्देश के साथ आती है।
safeDivideEither x y = Right (x `div` y)
-- और उपयोग में:
example3 :: Either String Int
example3 = safeDivideEither 10 2 -- Right 5
example4 :: Either String Int
example4 = safeDivideEither 10 0 -- Left "Divide by zero error."
गहराई से समझें
Haskell की दुनिया में, त्रुटि संभालने का एक मजबूत इतिहास रहा है। पुराने दिनों में, त्रुटियाँ आपके पूरे प्रोग्राम को गिरा सकती थीं - मजेदार नहीं। Haskell की टाइप सिस्टम इसे बहुत कम संभावना वाला बनाने के तरीके प्रदान करती है। हमारे पास Maybe
और Either
हैं, लेकिन अलग-अलग परिस्थितियों के लिए Exceptions
और IO
जैसे अन्य भी हैं।
Maybe
सरल है: अगर सब ठीक है तो आपको Just
कुछ मिलता है, या अगर नहीं है तो Nothing
मिलता है। Either
इसे और आगे बढ़ाता है, जिससे आप को एक त्रुटि सन्देश (Left
) या एक सफल परिणाम (Right
) वापस करने की अनुमति मिलती है।
दोनों प्योर हैं, यानी वे बाहर की दुनिया के साथ छेड़छाड़ नहीं करते - Haskell में यह एक बड़ी बात है। हम अनियंत्रित अपवादों की उन समस्याओं से बचते हैं जो कुछ अन्य भाषाओं में व्याप्त हैं।
उन लोगों के लिए जो Maybe
और Either
से संतुष्ट नहीं हैं, Control.Exception
जैसी लाइब्रेरीज अपवादों के माध्यम से अधिक पारंपरिक, आज्ञाकारी-शैली की त्रुटि संभालने प्रदान करती हैं। लेकिन उन्हें अत्यधिक स्वतंत्रतापूर्वक उपयोग करने से चीजें जटिल हो सकती हैं, इसलिए समुदाय अक्सर टाइपों पर टिका रहता है।
देखें भी
और गहराई से जानें:
- Haskell के अपने दस्तावेज: Haskell
- शुरुआती के लिए उत्तम: “Learn You a Haskell for Great Good!”