ট্র্যাক
/
F#
F#
/
সিলেবাস
/
ডিসক্রিমিনেটেড ইউনিয়ন
ডি

ডিসক্রিমিনেটেড ইউনিয়ন মধ্যে F#

15টি অনুশীলনী

ডিসক্রিমিনেটেড ইউনিয়ন সম্পর্কে

ডিসক্রিমিনেটেড ইউনিয়ন টাইপটি নির্দিষ্ট সংখ্যক নামযুক্ত কেস উপস্থাপন করে। একটি ডিসক্রিমিনেটেড ইউনিয়নের প্রতিটি মান ঠিক একটি নামযুক্ত কেসের সাথে অনুরূপ হয়। এই ধরনের ডেটা টাইপকে বলা হয় সাম টাইপ।

ডিসক্রিমিনেটেড ইউনিয়নের প্রতিটি কেসের সাথে ইচ্ছেমতো ডেটা যুক্ত থাকতে পারে, আর ভিন্ন ভিন্ন কেসে ভিন্ন ভিন্ন ধরনের ডেটা থাকতে পারে। কোনো কেসের সাথে ডেটা যুক্ত না থাকলে, ডিসক্রিমিনেটেড ইউনিয়নটি অন্য ভাষাগুলোতে সাধারণত যা এনামারেশন (বা এনাম) নামে পরিচিত হয়, তার অনুরূপ হয়।

ডিসক্রিমিনেটেড ইউনিয়ন ডিফাইন করা হয় type কিওয়ার্ড দিয়ে, আর এর জন্য খুব কম সিনট্যাক্স লাগে। এতে এগুলো ব্যবহার করা সহজ হয়, আর বেস লাইব্রেরিসহ অনেক জায়গায় এগুলোর ব্যবহার দেখতে পাবেন।

// Discriminated union without associated data
type Season =
    | Spring
    | Summer
    | Autumn
    | Winter

// Discriminated union with associated data
type Number =
    | Integer of int
    | Float of float
    | Invalid

নির্দিষ্ট কোনো কেসের জন্য মান তৈরি করা যায় তার নাম উল্লেখ করে, আর নামটি যদি অনন্য না হয় তাহলে তার পুরো নাম উল্লেখ করে। যেহেতু কেসের নামগুলো আসলে কনস্ট্রাক্টর ফাংশন, তাই সংশ্লিষ্ট ডেটা সাধারণ ফাংশন আর্গুমেন্ট হিসেবেই পাঠানো যায়।

let byName = Integer 2
let byFullName = Number.Invalid

ডিসক্রিমিনেটেড ইউনিয়নের স্ট্রাকচারাল ইকুয়ালিটি থাকে, যার মানে একই কেসের এবং একই (ঐচ্ছিক) ডেটাযুক্ত দুটি মান পরস্পর সমতুল্য।

ডিসক্রিমিনেটেড ইউনিয়ন নিয়ে কাজ করার সবচেয়ে পছন্দের উপায় হলো আইডেন্টিফায়ার প্যাটার্ন ব্যবহার করে প্যাটার্ন ম্যাচিং করা:

let describe number =
    match number with
    | Integer i -> sprintf "Integer: %d" i
    | Float d  -> sprintf "Float: %f" d
    | Invalid   -> "Invalid"
GitHub-এর মাধ্যমে সম্পাদনা করুন লিংকটি নতুন একটি উইন্ডো বা ট্যাবে খুলবে

ডিসক্রিমিনেটেড ইউনিয়ন শিখুন

অনুশীলন লক করা আছে

ডিসক্রিমিনেটেড ইউনিয়ন অনুশীলন করতে আরও 10টি অনুশীলনী আনলক করুন