Result टाइप की मदद से एक फंक्शन एक ही वैल्यू लौटा सकता है, जो ये सारी बातें बताती है:
Result टाइप एक जेनेरिक टाइप है, जिसके भीतर दो और टाइप होते हैं:
Result टाइप एक [डिस्क्रिमिनेटेड यूनियन][discriminated-union] भी है, जिसमें ये केस हो सकते हैं:
Ok <value>, जो सफल परिणाम को दर्शाता हैError <reason>, जो असफलता को दर्शाता हैनीचे दिया गया फंक्शन दिखाता है कि Result वैल्यू कैसे बनाई जाती है:
let validateName (name: string) : Result<string, string> =
match name with
| null -> Error "Name not found."
| "" -> Error "Name is empty."
| _ -> Ok name
इस उदाहरण में Ok वैल्यू एक स्ट्रिंग है (दिया गया नाम), और Error वैल्यू भी एक स्ट्रिंग है (एरर का कारण, इंसान के पढ़ने लायक रूप में)।
Result वैल्यू के अंदर की जानकारी पढ़नाइस टाइप डेफिनिशन और फंक्शन सिग्नेचर पर ध्यान दीजिए:
type FileOpenError =
| NotFound
| AccessDenied
| FileLocked
let openFile (filename: string) : Result<int, FileOpenError> =
जो कोड openFile फंक्शन को कॉल करता है, वह पैटर्न मैचिंग की मदद से सफलता और असफलता दोनों केस संभाल सकता है, जैसा कि इस उदाहरण में दिखाया गया है:
match openFile(filename) with
| Ok handle -> doSomethingWithFile(handle)
| Error NotFound -> printfn $"Error: file {filename} was not found."
| Error AccessDenied -> printfn $"Error: you do not have permission to open the file {filename}."
| Error FileLocked -> printfn $"Error: file {filename} is already in use."
आपको एक पासवर्ड चेकर बनाना है।
पासवर्ड चेकर उपयोगकर्ता के सुझाए गए पासवर्ड की जाँच करता है। जाँच का उद्देश्य यह पक्का करना है कि पासवर्ड उन शर्तों को पूरा करता है, जो उस संसाधन तक पहुँच नियंत्रित करने वाली संस्था तय करती है।
इस अभ्यास में पासवर्ड की शर्तें ये हैं:
आपके हल को सफलता या विफलता की स्थिति बताने के लिए Result का उपयोग करना है।
सफलता की स्थिति में Result को जाँचे गए पासवर्ड को एक स्ट्रिंग के रूप में बताना चाहिए।
विफलता की स्थिति में Result को वह नियम बताना चाहिए जिसका उल्लंघन हुआ है।
इस अभ्यास में पासवर्ड चेकर बहुत सरल रहेगा। यह सिर्फ तभी बताएगा जब एक ही नियम का उल्लंघन हुआ हो। आगे के एक अभ्यास में हम एक ज़्यादा वास्तविक पासवर्ड चेकर देखेंगे, जो बता सकता है कि एक साथ कई नियमों का उल्लंघन हुआ है।
checkPassword फंक्शन बनाइएcheckPassword फंक्शन दिए गए पासवर्ड की जाँच ऊपर बताए गए नियमों के अनुसार करता है। विफलता की स्थिति में यह बताता है कि कौन-सा नियम टूटा है। इसके लिए वह PasswordRule की कोई एक वैल्यू लेकर उसे Result वैल्यू के अंदर रख देता है।
checkPassword "abcdefghij5#"
// => Error MissingUppercaseLetter
getStatusMessage फंक्शन एक स्ट्रिंग लौटाता है जिसमें पढ़ने लायक संदेश होता है। यह संदेश बताता है कि checkPassword से लौटे रिज़ल्ट का मतलब क्या है।
getStatusMessage (Error MissingDigit)
// => "Error: does not have at least one digit"
Exercism पर साइन अप कीजिए और F# को 18 कॉन्सेप्ट148 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।