F # - भेदभाव रहित संघ

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

वाक्य - विन्यास

निम्न सिंटैक्स का उपयोग करके विभेदित यूनियनों को परिभाषित किया जाता है -

type type-name =
   | case-identifier1 [of [ fieldname1 : ] type1 [ * [ fieldname2 : ] 
type2 ...]
   | case-identifier2 [of [fieldname3 : ]type3 [ * [ fieldname4 : ]type4 ...]
...

हमारे की, सरल कार्यान्वयन विकल्प है, निम्नलिखित की तरह दिखाई देगा -

type choice =
   | Yes
   | No

निम्न उदाहरण प्रकार पसंद का उपयोग करता है -

type choice =
   | Yes
   | No

let x = Yes (* creates an instance of choice *)
let y = No (* creates another instance of choice *)
let main() =
   printfn "x: %A" x
   printfn "y: %A" y
main()

जब आप प्रोग्राम को संकलित और निष्पादित करते हैं, तो यह निम्न आउटपुट देता है -

x: Yes
y: No

उदाहरण 1

निम्न उदाहरण वोल्टेज राज्यों के कार्यान्वयन को दर्शाता है जो उच्च या निम्न पर थोड़ा सेट करता है -

type VoltageState =
   | High
   | Low

let toggleSwitch = function (* pattern matching input *)
   | High -> Low
   | Low -> High

let main() =
   let on = High
   let off = Low
   let change = toggleSwitch off

   printfn "Switch on state: %A" on
   printfn "Switch off state: %A" off
   printfn "Toggle off: %A" change
   printfn "Toggle the Changed state: %A" (toggleSwitch change)

main()

जब आप प्रोग्राम को संकलित और निष्पादित करते हैं, तो यह निम्न आउटपुट देता है -

Switch on state: High
Switch off state: Low
Toggle off: High
Toggle the Changed state: Low

उदाहरण 2

type Shape =
   // here we store the radius of a circle
   | Circle of float

   // here we store the side length.
   | Square of float

   // here we store the height and width.
   | Rectangle of float * float

let pi = 3.141592654

let area myShape =
   match myShape with
   | Circle radius -> pi * radius * radius
   | Square s -> s * s
   | Rectangle (h, w) -> h * w

let radius = 12.0
let myCircle = Circle(radius)
printfn "Area of circle with radius %g: %g" radius (area myCircle)

let side = 15.0
let mySquare = Square(side)
printfn "Area of square that has side %g: %g" side (area mySquare)

let height, width = 5.0, 8.0
let myRectangle = Rectangle(height, width)
printfn "Area of rectangle with height %g and width %g is %g" height width (area myRectangle)

जब आप प्रोग्राम को संकलित और निष्पादित करते हैं, तो यह निम्न आउटपुट देता है -

Area of circle with radius 12: 452.389
Area of square that has side 15: 225
Area of rectangle with height 5 and width 8 is 40