ট্র্যাক
/
F#
F#
/
সিলেবাস
/
প্যাটার্ন ম্যাচিং
প্

প্যাটার্ন ম্যাচিং মধ্যে F#

১টি অনুশীলনী

প্যাটার্ন ম্যাচিং সম্পর্কে

একটি if/elif/else এক্সপ্রেশন শর্তসাপেক্ষে লজিক চালাতে ব্যবহার করা যেতে পারে। F# এছাড়াও শর্তসাপেক্ষে লজিক চালানোর আরেকটি, আরও শক্তিশালী উপায় আছে: প্যাটার্ন ম্যাচিং। প্যাটার্ন ম্যাচিংয়ের মাধ্যমে একটি মানকে এক বা একাধিক প্যাটার্নের বিরুদ্ধে পরীক্ষা করা যায়। এমন একটি প্যাটার্নের উদাহরণ হলো কনস্ট্যান্ট প্যাটার্ন, যা একটি মানকে একটি কনস্ট্যান্টের (যেমন 1 বা "hello") সাথে মেলায়।

F#-এ, প্যাটার্ন ম্যাচিং match কিওয়ার্ডের মাধ্যমে করা হয়:

let describe number =
    match number with
    | 0 -> "Zero"
    | 1 -> "One"

যদিও এটি অন্য ভাষায় switch স্টেটমেন্টের মতো দেখতে পারে, তবে অন্যান্য প্যাটার্নও ব্যবহার করলে প্যাটার্ন ম্যাচিংয়ের আসল শক্তি প্রকাশ পায়। এমন একটি প্যাটার্ন হলো ভ্যারিয়েবল প্যাটার্ন, যা একটি মান ক্যাপচার করতে দেয়:

match number with
| 0 -> "Zero"
| i -> sprintf "Non zero: %d" i

কিছু ক্ষেত্রে, আপনি একটি প্যাটার্নে একটি অতিরিক্ত শর্ত যোগ করতে চাইতে পারেন। এটি গার্ড (ক্লজ) নামে পরিচিত, যা when কিওয়ার্ড ব্যবহার করে যোগ করা যায়:

match number with
| 0 -> "Zero"
| i when i < 0 -> "Negative number"

একটি গার্ড ক্লজ যেকোনো বৈধ এক্সপ্রেশন হতে পারে, যার মধ্যে ফাংশন কল করাও অন্তর্ভুক্ত।

উপরের উদাহরণে, সমস্ত সম্ভাব্য ইনপুটের জন্য মিলে যাওয়া প্যাটার্ন থাকবে না। কম্পাইলার এটি শনাক্ত করবে এবং একটি ওয়ার্নিং দেবে। এটি এক্সহসটিভ ম্যাচিং নামে পরিচিত। ওয়ার্নিং দূর করতে, সমস্ত কেস হ্যান্ডল করতে হবে। এর জন্য, [ওয়াইল্ডকার্ড প্যাটার্ন][wildcard-pattern] ব্যবহার করা যায়, যা যেকোনো মানের সাথে মিলে যায় এমন একটি প্যাটার্ন:

match number with
| i when i < 0 -> "Negative number"
| _ -> "Positive number"

// No compiler warning

লক্ষ্য করুন যে কম্পাইলার when ক্লজ ব্যবহার করে এক্সহসটিভনেস অনুমান করতে পারে না:

match number with
| i when i < 0 -> "Negative number"
| i when i >= 0 -> "Positive number"

// Compiler warning

প্যাটার্ন ম্যাচিং উপরে থেকে নিচে পর্যন্ত প্রতিটি প্যাটার্নের বিরুদ্ধে একটি মান পরীক্ষা করবে, যতক্ষণ না এটি একটি মিলে যাওয়া প্যাটার্ন খুঁজে পায় এবং সেই প্যাটার্নের সাথে সম্পর্কিত লজিক চালায়। প্যাটার্নের ক্রম গুরুত্বপূর্ণ! তাই, ডিসকার্ড প্যাটার্নটি সর্বদা একটি match এক্সপ্রেশনে শেষ প্যাটার্ন হওয়া উচিত।

যদিও প্যাটার্ন ম্যাচিং খুব শক্তিশালী, সাধারণ শর্তসাপেক্ষ লজিক সাধারণত একটি if/else এক্সপ্রেশন ব্যবহার করে আরও স্পষ্টভাবে প্রকাশ করা যায়:

let usingPatternMatching number =
    match number with
    | 0 -> "Zero"
    | _ -> "Non-zero"

let usingIfElse number = if number = 0 then "Zero" else "Non-zero"
GitHub-এর মাধ্যমে সম্পাদনা করুন লিংকটি নতুন একটি উইন্ডো বা ট্যাবে খুলবে

প্যাটার্ন ম্যাচিং শিখুন