खोज…
टिप्पणियों
पैटर्न मिलान कई कार्यात्मक भाषाओं की एक शक्तिशाली विशेषता है क्योंकि यह अक्सर शाखाओं का उपयोग करने की अनुमति देता है if
बहुत से else if
/ else
शैली बयानों का उपयोग करने की तुलना में बहुत ही आसानी से नियंत्रित किया जाए। हालांकि पर्याप्त विकल्प और "जब" गार्ड , पैटर्न मिलान भी एक नज़र में समझने के लिए क्रिया और मुश्किल हो सकता है।
जब ऐसा होता है F # का सक्रिय पैटर्न , मिलान तर्क को सार्थक नाम देने का एक शानदार तरीका हो सकता है, जो कोड को सरल करता है और पुन: उपयोग को भी सक्षम बनाता है।
मिलान विकल्प
पैटर्न मिलान विकल्पों को संभालने के लिए उपयोगी हो सकता है:
let result = Some("Hello World")
match result with
| Some(message) -> printfn message
| None -> printfn "Not feeling talkative huh?"
पैटर्न मिलान चेक पूरे डोमेन को कवर किया गया है
let x = true
match x with
| true -> printfn "x is true"
एक चेतावनी देता है
C: \ Program Files (x86) \ Microsoft VS कोड \ Untitled-1 (2,7): FS0025 को चेतावनी: अधूरा पैटर्न इस अभिव्यक्ति पर मेल खाता है। उदाहरण के लिए, मान 'झूठा' एक मामले को पैटर्न द्वारा कवर नहीं किए जाने का संकेत दे सकता है।
ऐसा इसलिए है क्योंकि सभी संभावित मल मूल्यों को कवर नहीं किया गया था।
बूलों को स्पष्ट रूप से सूचीबद्ध किया जा सकता है लेकिन चींटियों को सूचीबद्ध करना कठिन है
let x = 5
match x with
| 1 -> printfn "x is 1"
| 2 -> printfn "x is 2"
| _ -> printfn "x is something else"
यहाँ हम विशेष _
चरित्र का उपयोग करते हैं। _
अन्य सभी संभावित मामलों से मेल खाता है।
_
आपको परेशानी में डाल सकता है
एक प्रकार पर विचार करें जिसे हम स्वयं बनाते हैं यह ऐसा दिखता है
type Sobriety =
| Sober
| Tipsy
| Drunk
हम इस तरह दिखने वाले एक्सपोज़र के साथ मैच लिख सकते हैं
match sobriety with
| Sober -> printfn "drive home"
| _ -> printfn "call an uber"
उपरोक्त कोड समझ में आता है। हम मान रहे हैं कि अगर आप शांत नहीं हैं, तो आपको एक uber कॉल करना चाहिए ताकि हम उस का उपयोग करने के लिए _
का उपयोग करें
हम बाद में इसके लिए अपना कोड रिफलेक्टर करते हैं
type Sobriety =
| Sober
| Tipsy
| Drunk
| Unconscious
एफ # संकलक हमें एक चेतावनी देनी चाहिए और हमें अपनी मैच अभिव्यक्ति को फिर से देखने के लिए प्रेरित करना चाहिए ताकि व्यक्ति को चिकित्सा की तलाश हो। इसके बजाय मैच की अभिव्यक्ति चुपचाप बेहोश व्यक्ति का इलाज करती है जैसे कि वे केवल सुझाव थे। मुद्दा यह है कि आपको तर्क त्रुटियों से बचने के लिए मामलों को स्पष्ट रूप से सूचीबद्ध करने का विकल्प चुनना चाहिए।
मामलों का मूल्यांकन ऊपर से नीचे तक किया जाता है और पहले मैच का उपयोग किया जाता है
गलत उपयोग:
निम्नलिखित स्निपेट में, अंतिम मैच का उपयोग कभी नहीं किया जाएगा:
let x = 4
match x with
| 1 -> printfn "x is 1"
| _ -> printfn "x is anything that wasn't listed above"
| 4 -> printfn "x is 4"
प्रिंट
x कुछ भी है जो ऊपर सूचीबद्ध नहीं था
सही उपयोग:
यहां, x = 1
और x = 4
दोनों अपने विशिष्ट मामलों को हिट करेंगे, जबकि बाकी सब कुछ डिफ़ॉल्ट मामले के माध्यम से गिर जाएगा _
:
let x = 4
match x with
| 1 -> printfn "x is 1"
| 4 -> printfn "x is 4"
| _ -> printfn "x is anything that wasn't listed above"
प्रिंट
x 4 है
जब गार्ड आपको मनमानी सशर्त जोड़ने देते हैं
type Person = {
Age : int
PassedDriversTest : bool }
let someone = { Age = 19; PassedDriversTest = true }
match someone.PassedDriversTest with
| true when someone.Age >= 16 -> printfn "congrats"
| true -> printfn "wait until you are 16"
| false -> printfn "you need to pass the test"