मुख्य कंटेंट तक स्किप करें

मैच स्टेटमेंट

परिचय

match स्टेटमेंट एक नियंत्रण स्टेटमेंट है जो एक मान की तुलना कई पैटर्न से करता है और शाखांकित होता है। यह if / else if श्रृंखला की तुलना में विभाजन का उद्देश्य स्पष्ट रूप से प्रदर्शित करने के लिए उपयोगी है।

वेव में match अभी एक statement(स्टेटमेंट) है और इसे एक मूल्य के रूप में सीधे अभिव्यक्त नहीं कर सकते हैं। अर्थात, var x = match (...) { ... } जैसे प्रारूप का उपयोग नहीं किया जा सकता।


मूल व्याकरण

match (value) {
pattern1 => {
// निष्पादन ब्लॉक
}
pattern2 => {
// निष्पादन ब्लॉक
}
_ => {
// डिफ़ॉल्ट ब्लॉक
}
}

विन्यास नियम:

  • हेडर match (expr) स्वरूप का उपयोग करता है।
  • प्रत्येक आर्म का रूप { ... } होता है।
  • आर्म बॉडी को अवश्य ही { ... } ब्लॉक होना चाहिए।
  • आर्म के बीच में केवल लाइन ब्रेक या , या ; दोनों का विभाजक के रूप में उपयोग किया जा सकता है।

पैटर्न के प्रकार

वर्तमान में समर्थित पैटर्न तीन प्रकार के होते हैं।

  1. पूर्णांक लिटरल पैटर्न
0 => { ... }
1 => { ... }
42 => { ... }
  1. पहचानकर्ता पैटर्न
Off => { ... }
On => { ... }

पहचानकर्ता पैटर्न का उपयोग enum वेरियंट जैसे पूरे संख्यात्मक स्थिरांक रूप में व्याख्या योग्य मानों के लिए किया जाता है।

  1. वाइल्डकार्ड पैटर्न (_)
_ => { ... }

यह डिफ़ॉल्ट आर्म है जो किसी भी पैटर्न से मेल नहीं खाने पर निष्पादित होता है।


मेल खाने का लक्ष्य प्रकार

वर्तमान कार्यान्वयन के अनुसार match के लिए लक्ष्य मान को पूर्णांक श्रेणी/एनम श्रेणी होना चाहिए। स्ट्रिंग, फ्लोटिंग-पॉइंट नंबर, ढांचे आदि को match के लक्ष्य के रूप में उपयोग नहीं किया जा सकता।


उदाहरण 1: पूर्णांक शाखा

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

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

return result;
}

उदाहरण 2: एनम शाखा

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. पैटर्न को स्थिर होना चाहिए
  • पहचानकर्ता पैटर्न केवल संख्यात्मक स्थिरांक/एनम वेरियंट के रूप में व्याख्या योग्य मानों का उपयोग करें।

सारांश

वेव का match पूर्णांक/एनम शाखाओं के लिए अनुकूलित स्टेटमेंट नियंत्रण कथन है। => + ब्लॉक संरचना का उपयोग करता है, और वाइल्डकार्ड (_) के माध्यम से डिफ़ॉल्ट शाखा तैयार कर सकते हैं।

ज्यादा शाखा केस होने पर if / else if की तुलना में इसे पढ़ना आसान और उद्देश्य स्पष्ट होता है।