F # - Ayrımcılık Yapan Sendikalar

Birlikler veya ayrımcı sendikalar, iyi tanımlanmış seçenekler kümesini temsil eden karmaşık veri yapıları oluşturmanıza olanak tanır. Örneğin, evet ve hayır olmak üzere iki değeri olan bir seçim değişkeninin bir uygulamasını oluşturmanız gerekir . Birlikler aracını kullanarak bunu tasarlayabilirsiniz.

Sözdizimi

Ayrımcı sendikalar aşağıdaki sözdizimi kullanılarak tanımlanır -

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

Basit uygulamamız olan seçimimiz aşağıdaki gibi görünecektir -

type choice =
   | Yes
   | No

Aşağıdaki örnek, tür seçimini kullanır -

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()

Programı derleyip çalıştırdığınızda, aşağıdaki çıktıyı verir -

x: Yes
y: No

örnek 1

Aşağıdaki örnek, bir biti yüksek veya düşük olarak ayarlayan voltaj durumlarının uygulanmasını gösterir -

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()

Programı derleyip çalıştırdığınızda, aşağıdaki çıktıyı verir -

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

Örnek 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)

Programı derleyip çalıştırdığınızda, aşağıdaki çıktıyı verir -

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