Skip to main content

మ్యాచ్ ప్రకటన

పరిచయం

match స్టేట్‌మెంట్ అనేది ఒక విలువను బహుళ నమూనాలు మరియు శాఖలతో పోల్చే నియంత్రణ ప్రకటన. if / else if చైన్ కంటే బ్రాంచ్ ఉద్దేశాన్ని మరింత స్పష్టంగా వ్యక్తీకరించడానికి ఇది ఉపయోగపడుతుంది.

ప్రస్తుతం, Wave యొక్క match స్టేట్‌మెంట్, మరియు నేరుగా విలువగా మూల్యాంకనం చేయబడిన వ్యక్తీకరణ ఫారమ్‌కు మద్దతు లేదు. అంటే, var x = match (...) { ... } వంటి ఫారమ్‌లు ఉపయోగించబడవు.


ప్రాథమిక వ్యాకరణం

match (value) {
pattern1 => {
// అమలు బ్లాక్
}
pattern2 => {
// అమలు బ్లాక్
}
_ => {
// డిఫాల్ట్ బ్లాక్
}
}

వ్యాకరణ నియమాలు:

  • హెడర్ match (expr) ఆకృతిని ఉపయోగిస్తుంది.
  • ప్రతి చేయి pattern => { block } ఆకృతిని ఉపయోగిస్తుంది.
  • చేయి శరీరం తప్పనిసరిగా { ... } బ్లాక్ అయి ఉండాలి.
  • మీరు చేతుల మధ్య లైన్ బ్రేక్‌లను ఉపయోగించవచ్చు లేదా మీరు , లేదా ;ని సెపరేటర్‌గా ఉపయోగించవచ్చు.

నమూనా రకం

దిగువన మూడు ప్రస్తుతం మద్దతు ఉన్న నమూనాలు ఉన్నాయి.

  1. పూర్ణాంకం అక్షర నమూనా
0 => { ... }
1 => { ... }
42 => { ... }
  1. ఐడెంటిఫైయర్ నమూనా
Off => { ... }
On => { ... }

ఐడెంటిఫైయర్ నమూనాలు విలువలను ఉపయోగిస్తాయి, వీటిని పూర్ణాంక స్థిరాంకాలుగా enum వేరియంట్‌లుగా అర్థం చేసుకోవచ్చు.

  1. వైల్డ్‌కార్డ్ నమూనా (_)
_ => { ... }

నమూనా సరిపోలనప్పుడు ఇది డిఫాల్ట్ చేయి అమలు చేయబడుతుంది.


సరిపోలే లక్ష్యం రకం

ప్రస్తుత అమలు ప్రకారం, match యొక్క లక్ష్య విలువ తప్పనిసరిగా పూర్ణాంకం/enum సిరీస్ అయి ఉండాలి. స్ట్రింగ్‌లు, ఫ్లోటింగ్ పాయింట్ నంబర్‌లు, స్ట్రక్చర్‌లు మొదలైనవి 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 శాఖలు

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. నమూనా స్థిరంగా ఉండాలి
  • ఐడెంటిఫైయర్ నమూనాల కోసం, పూర్ణాంక స్థిరాంకాలు/enum వేరియంట్‌లుగా అర్థం చేసుకోగలిగే విలువలను మాత్రమే ఉపయోగించండి.

సారాంశం

Wave యొక్క match అనేది పూర్ణాంకం/enum బ్రాంచ్ కోసం ఆప్టిమైజ్ చేయబడిన స్టేట్‌మెంట్ కంట్రోల్ స్టేట్‌మెంట్. ఇది => + బ్లాక్ నిర్మాణాన్ని ఉపయోగిస్తుంది మరియు వైల్డ్‌కార్డ్‌ల (_) ద్వారా డిఫాల్ట్ బ్రాంచ్‌లను కాన్ఫిగర్ చేయవచ్చు.

ఎక్కువ శాఖల కేసులు ఉన్నాయి, if / else if కంటే సులభంగా చదవవచ్చు మరియు మరింత స్పష్టంగా దాని ఉద్దేశాన్ని వెల్లడిస్తుంది.