ప్రధాన కంటెంట్‌కు వెళ్లండి
మాడ్యూల్ 2 · 2లో పాఠం 2కోర్సులో 4/14~15 min
మాడ్యూల్ పాఠాలు (2/2)

నమూనా సరిపోలిక, ఎంపిక మరియు ఫలితం

రస్ట్ ప్యాటర్న్ మ్యాచింగ్ అనే అత్యంత శక్తివంతమైన నియంత్రణ ప్రవాహ యంత్రాంగాన్ని కలిగి ఉంది. ఇది నమూనాల శ్రేణితో విలువను సరిపోల్చడానికి మరియు ఏ నమూనా సరిపోలుతుందనే దాని ఆధారంగా కోడ్‌ని అమలు చేయడానికి మిమ్మల్ని అనుమతిస్తుంది.

match స్టేట్‌మెంట్

రస్ట్‌లోని match స్టేట్‌మెంట్ ఇతర భాషల్లోని switchని పోలి ఉంటుంది, కానీ చాలా శక్తివంతమైనది మరియు సురక్షితమైనది. కంపైలర్ మ్యాచ్ ** సమగ్ర** అని నిర్ధారిస్తుంది, అంటే సాధ్యమయ్యే అన్ని కేసులను తప్పనిసరిగా నిర్వహించాలి:

Rust
enum Direction {
    North,
    South,
    East,
    West,
}

let dir = Direction::East;

match dir {
    Direction::North => println!("Andiamo a Nord"),
    Direction::South => println!("Andiamo a Sud"),
    Direction::East => println!("Andiamo a Est"),
    Direction::West => println!("Andiamo a Ovest"),
}

విలువ లేకపోవడాన్ని నిర్వహించడం: Option

రస్ట్‌కి శూన్య విలువ (null లేదా nil) భావన లేదు. బదులుగా, ప్రామాణిక లైబ్రరీ Option<T> అని పిలువబడే ఒక enumని నిర్వచిస్తుంది, ఇందులో వీటిని కలిగి ఉండవచ్చు:

  • Some(T): T రకం విలువను కలిగి ఉంది.
  • None: విలువ లేకపోవడాన్ని సూచిస్తుంది.
Rust
let x: Option<i32> = Some(5);
let y: Option<i32> = None;

match x {
    Some(val) => println!("C'e un valore: {}", val),
    None => println!("Nessun valore trovato"),
}

పునరుద్ధరించదగిన లోపాలను నిర్వహించడం: Result

విఫలమయ్యే ఆపరేషన్ల కోసం (ఫైల్‌ని చదవడం లేదా స్ట్రింగ్‌ని నంబర్‌గా అన్వయించడం వంటివి), రస్ట్ Result<T, E> enumని ఉపయోగిస్తుంది, ఇందులో రెండు రకాలు ఉన్నాయి:

  • Ok(T): ఆపరేషన్ విజయవంతమైంది మరియు విజయ విలువ Tని కలిగి ఉంది.
  • Err(E): ఆపరేషన్ విఫలమైంది మరియు E లోపాన్ని కలిగి ఉంది.
Rust
fn divide(numerator: f64, denominator: f64) -> Result<f64, String> {
    if denominator == 0.0 {
        Err(String::from("Divisione per zero!"))
    } else {
        Ok(numerator / denominator)
    }
}

రస్ట్ కంపైలర్‌కు ధన్యవాదాలు, మీరు Ok లోపల విలువను యాక్సెస్ చేయడానికి ముందు Err కేస్‌ను నిర్వహించవలసి వస్తుంది, ఇది చాలా సాధారణ రన్‌టైమ్ బగ్‌లను నివారిస్తుంది.

వైల్డ్‌కార్డ్ నమూనా _

పెద్ద సంఖ్యలో వేరియంట్‌లను (పూర్ణాంకాల వంటివి) కలిగి ఉన్న డేటా రకాలతో పని చేస్తున్నప్పుడు, అన్ని కేసులను matchలో జాబితా చేయడం అసాధ్యం. రస్ట్ స్పష్టంగా నిర్వచించబడని మిగిలిన అన్ని కేసులను పట్టుకోవడానికి వైల్డ్‌కార్డ్ అక్షరం _ని ఉపయోగించడానికి అనుమతిస్తుంది:

Rust
let some_u8 = 3u8;
match some_u8 {
    1 => println!("One"),
    2 => println!("Two"),
    _ => println!("Something else"), // Handles all other values
}

మీరే ప్రయత్నించండి

వ్యాయామం#rust.m2.l2.e1
ప్రయత్నాలు: 0లోడ్ అవుతోంది...

Some(42)ని కలిగి ఉన్న<i32> రకం ఎంపిక యొక్క maybe_value పేరుతో వేరియబుల్‌ని ప్రకటించండి. maybe_valueలో మ్యాచ్ స్టేట్‌మెంట్‌ను ఉపయోగించండి: అందులో కొంత(v) ప్రింట్ 'విలువ: v' (printlnని ఉపయోగిస్తోంది!) కలిగి ఉంటే, అది ఏదీ లేని ప్రింట్ 'విలువ లేదు'.

ఎడిటర్ లోడ్ అవుతోంది…
సూచనను చూపించు

`match maybe_value { Some(v) => println!('value is: {}', v), none => println!('value') }` బ్లాక్‌ని వ్రాయండి.

3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది

వ్యాయామం#rust.m2.l2.e2
ప్రయత్నాలు: 0లోడ్ అవుతోంది...

చెక్_ఏజ్ ఫంక్షన్‌ను పూర్తి చేయండి, తద్వారా వయస్సు 18 కంటే ఎక్కువ లేదా సమానంగా ఉంటే సరే ('పెద్దలు') మరియు లేకపోతే తప్పు('మైనర్') తిరిగి వస్తుంది.

ఎడిటర్ లోడ్ అవుతోంది…
సూచనను చూపించు

`ఓకే('పెద్దలు')`లేదా`ఎర్ర్('మైనర్')`ని తిరిగి ఇవ్వాలో లేదో నిర్ణయించడానికి `వయస్సు ఉంటే >= 18`ని ఉపయోగించండి.

3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది

వ్యాయామం#rust.m2.l2.e3
ప్రయత్నాలు: 0లోడ్ అవుతోంది...

యాక్టివ్ మరియు ఇన్‌యాక్టివ్ వేరియంట్‌లను కలిగి ఉన్న స్టేటస్ అనే పేరును ప్రకటించండి. ప్రధానంగా, Status :: Active విలువతో వేరియబుల్ కరెంట్_స్టేటస్‌ని ప్రకటించండి. చివరగా, స్థితి సక్రియంగా ఉంటే 'యాక్టివ్' లేదా స్థితి నిష్క్రియంగా ఉంటే 'క్రియారహితం' అని ప్రింట్ చేయడానికి current_statusలో మ్యాచ్ స్టేట్‌మెంట్‌ను ఉపయోగించండి.

ఎడిటర్ లోడ్ అవుతోంది…
సూచనను చూపించు

`enum స్టేటస్ {యాక్టివ్, ఇన్‌యాక్టివ్ }`తో మెయిన్‌కి ముందు enumని నిర్వచించండి. ప్రధానంగా, `లెట్ కరెంట్*స్టేటస్ = స్టేటస్::యాక్టివ్;`ని ఉపయోగించండి మరియు వేరియంట్‌లలో `మ్యాచ్`ని అమలు చేయండి.

3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది