የግጥሚያ መግለጫ
መግቢያ
የmatch መግለጫ አንድ እሴት ከብዙ ቅጦች እና ቅርንጫፎች ጋር የሚያወዳድር የቁጥጥር መግለጫ ነው።
ይህ ከif / else if ሰንሰለት ይልቅ የቅርንጫፉን ሃሳብ በግልፅ ለመግለፅ ይጠቅማል።
በአሁኑ ጊዜ፣ match የWave መግለጫ ነው፣ እና እንደ እሴት በቀጥታ የሚገመገም የገለጻ ቅፅ አይደገፍም።
ማለትም እንደ var x = match (...) { ... } ያሉ ቅጾችን መጠቀም አይቻልም።
መሰረታዊ ሰዋሰው
match (value) {
pattern1 => {
// የማስፈጸሚያ እገዳ
}
pattern2 => {
// የማስፈጸሚያ እገዳ
}
_ => {
// ነባሪ እገዳ
}
}
የሰዋሰው ህጎች፡-
- ራስጌው የ
match (expr)ቅርጸትን ይጠቀማል። - እያንዳንዱ ክንድ የ
pattern => { block }ቅርጸት ይጠቀማል። - የክንድ አካል
{ ... }ብሎክ መሆን አለበት። - በክንድ መካከል የመስመር መግቻዎችን ብቻ መጠቀም ይችላሉ ወይም
,ወይም;እንደ መለያየት መጠቀም ይችላሉ።
የስርዓተ-ጥለት ዓይነት
በአሁኑ ጊዜ ሶስት የሚደገፉ ቅጦች ከታች አሉ።
- ኢንቲጀር ቀጥተኛ ንድፍ
0 => { ... }
1 => { ... }
42 => { ... }
- መለያ ጥለት
Off => { ... }
On => { ... }
የመለየት ቅጦች ** እንደ ኢንቲጀር ቋሚዎች ሊተረጎሙ የሚችሉ እሴቶችን ይጠቀማሉ *** እንደ ኢነም ተለዋጮች።
- የዱር ካርድ ንድፍ (
_)
_ => { ... }
ይህ ምንም ስርዓተ-ጥለት ካልተዛመደ የሚተገበረው ነባሪ ክንድ ነው።
ተዛማጅ የዒላማ ዓይነት
አሁን ባለው ትግበራ የ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 ቅርንጫፍ
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ቤተሰብ ጋር በሚመሳሰል መልኩ ** አንድ የሚዛመድ ክንድ ብቻ ነው የሚሰራው**። - አውቶማቲክ ውድቀት የለም።
- የ
_ክንድ ቢበዛ አንድ ጊዜ መጠቀም ይቻላል። _ክንድ ባይኖረውም ሰዋሰው ተፈቅዷል። (የሚዛመደው ክንድ ከሌለ ክንድ አይገደልም)
ጥንቃቄዎች
- ምንም የተባዙ ጉዳዮች የሉም
- ተመሳሳይ ጉዳይ የተባዛ መግለጫ የማጠናቀር ስህተትን ያስከትላል።
_ምንም ብዜት የለም።
_ክንድ ከአንድ ጊዜ በላይ ሊታወጅ አይችልም።
- የእጅ ማገጃ ያስፈልጋል
- ከ
=>በኋላ የ{ ... }ብሎክ መጠቀም አለቦት።
- ስርዓተ-ጥለት ቋሚ መሆን አለበት
- ለዪ ስርዓተ ጥለቶች፣ እንደ ኢንቲጀር ቋሚዎች/ኢነም ተለዋጮች ሊተረጎሙ የሚችሉ እሴቶችን ብቻ ይጠቀሙ።
ማጠቃለያ
match የWave የመግለጫ ቁጥጥር መግለጫ ለኢንቲጀር/ኢነም ቅርንጫፍነት የተመቻቸ ነው።
የ=> + ብሎክ መዋቅርን ይጠቀማል እና ነባሪ ቅርንጫፎችን በዱር ካርዶች (_) ማዋቀር ይችላል።
የቅርንጫፍ ጉዳዮች ብዙ ሲሆኑ፣ ከ if / else if የበለጠ ለማንበብ ቀላል ነው እና ዓላማውን በግልፅ ያሳያል።
