স্কিপ করে মূল কন্টেন্ট এ যান

ম্যাচ স্টেটমেন্ট

পরিচিতি

match স্টেটমেন্ট হল একটি নিয়ন্ত্রণ বাক্য যা একক মূল্যকে বিভিন্ন প্যাটার্নের সাথে তুলনা করে শাখায় বিভক্ত করে। if / else if চেইনের থেকে শাখা উদ্দেশ্য আরও স্পষ্টভাবে জানানোর সময় এটি কার্যকর।

বর্তমানে Wave এর match একটি statement(বাক্য), এবং এটি সরাসরি মূল্যায়নপুযোগ্য দ্বারা সমর্থিত নয়। অর্থাৎ, var x = match (...) { ... } এর মতো ফর্মগুলি ব্যবহারযোগ্য নয়।


প্রাথমিক ব্যাকরণ

match (value) {
pattern1 => {
// মৃত্যুদন্ড ব্লক
}
pattern2 => {
// মৃত্যুদন্ড ব্লক
}
_ => {
// ডিফল্ট ব্লক
}
}

ব্যাকরণ নিয়ম:

  • শিরোনাম match (expr) ফর্মটি ব্যবহার করে।
  • প্রতি বাহুতে { ... } ফর্মটি ব্যবহার করা হয়।
  • বাহু কন্টেন্ট অবশ্য { ... } ব্লক হতে হবে।
  • বাহু মধ্যে কেবল নিউ লাইনের প্রয়োজন এবং পৃথককারী হিসেবে , অথবা ; ব্যবহার করা যায়।

প্যাটার্নের প্রকারভেদ

বর্তমানে সমর্থনকৃত প্যাটার্নগুলি নিম্নলিখিত ৩ প্রকারের।

  1. ইন্টিজার লিটারাল প্যাটার্ন
0 => { ... }
1 => { ... }
42 => { ... }
  1. সনাক্তকারী প্যাটার্ন
Off => { ... }
On => { ... }

সনাক্তকারী প্যাটার্ন টির জন্য enum variant এর মতো ব্যবহার হয়, যা হল ইন্টিজার কনস্ট্যান্ট হিসেবে ব্যাখ্যা করা যায়

  1. ওয়াইল্ডকার্ড প্যাটার্ন (_)।
_ => { ... }

যখন কোন প্যাটার্ন মেলেনি তখন চালিত মূল বাহু।


ম্যাচিং টার্গেট টাইপ

বর্তমান বাস্তবায়ন অনুযায়ী match এর লক্ষ্য মান ইনটিজার সিরিজ/এনাম সিরিজ হওয়া উচিত। স্ট্রিং, ফ্লোটিং-পয়েন্ট, ও স্ট্রাকচার ইত্যাদি match এর লক্ষ্য হিসেবে ব্যবহার করা যাবে না।


উদাহরণ ১: ইন্টিজার বিভাজন

fun classify_num(v: i32) -> i32 {
var result: i32 = -1;

match (v) {
0 => {
result = 10;
}
1 => {
result = 20;
}
_ => {
result = 99;
}
}

return result;
}

উদাহরণ ২: এনাম বিভাজন

enum Mode -> i32 {
Off = 0,
On = 1,
Unknown = 2
}

fun classify_mode(m: Mode) -> i32 {
match (m) {
Off => {
return 1;
}
On => {
return 2;
}
_ => {
return 3;
}
}
}

কর্ম নিয়মাবলী

  • switch সিরিজের মতো অনুরূপভাবে যেকোনো একটি মিলিত হাতই শুধুমাত্র কার্যকরী হবে
  • স্বয়ংক্রিয় ফ্লথ্রু নেই।
  • _ বাহু শুধুমাত্র একবারই ব্যবহার করা যেতে পারে।
  • _ বাহু না থাকলেও তা ব্যাকরণগতভাবে অনুমোদনযোগ্য। (মিলিত বাহু না থাকলে কোনো বাহু কার্যকর হয় না)

সতর্কতা

  1. প্রতিলিপি ঘটনা নিষিদ্ধ
  • একই ঘটনা প্রতিলিপি ঘোষণার ফলে কম্পাইল ত্রুটি ঘটে।
  1. _ প্রতিলিপি নিষিদ্ধ
  • একাধিকবার _ বাহু ঘোষণা করা যাবে না।
  1. বাহু ব্লক আবশ্যক
  • => পরে অবশ্যই { ... } ব্লক ব্যবহার করতে হবে।
  1. প্যাটার্ন অবশ্যই ধ্রুবক হতে হবে
  • পরিচয়কারী প্যাটার্নের জন্য শুধুমাত্র পূর্ণসংখ্যা ধ্রুবক/এনাম ভেরিয়েন্ট হিসেবে ব্যাখ্যা করা যায় এমন মান ব্যবহার করুন।

সারাংশ

Wave এর match হল পূর্ণসংখ্যা/এনাম শাখার জন্য সর্বাধিকীকৃত স্টেটমেন্ট নিয়ন্ত্রণ বাক্য। => + ব্লক স্ট্রাকচার ব্যবহার করে, ওয়াইল্ডকার্ড (_) এর মাধ্যমে গভীর শাখা গঠন করা যায়।

শাখা ঘটনা যত বেশি থাকবে if / else if এর তুলনায় পড়তে সহজ ও উদ্দেশ্য পরিষ্কারভাবে প্রকাশ করতে পারা যায়।