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

లక్షణాలు మరియు లక్షణాల సరిహద్దులు

లక్షణాలు నిర్దిష్ట రకం కలిగి ఉన్న ప్రవర్తనను నిర్వచిస్తుంది మరియు ఇతర రకాలతో భాగస్వామ్యం చేయగలదు. ఇతర ప్రోగ్రామింగ్ భాషలలోని ఇంటర్‌ఫేస్‌ల మాదిరిగానే నిర్దిష్ట సాధారణ కార్యాచరణ లేదా ఇంటర్‌ఫేస్‌ను సూచించే పద్ధతుల సమితిని నిర్వచించడానికి మేము లక్షణాలను ఉపయోగించవచ్చు.

లక్షణ సరిహద్దులు సాధారణ రకం తప్పనిసరిగా నిర్దిష్ట లక్షణాన్ని అమలు చేయాలని పేర్కొనడానికి అనుమతిస్తుంది, కంపైల్ సమయంలో అవసరమైన పద్ధతులు అందుబాటులో ఉన్నాయని నిర్ధారిస్తుంది.


ఒక లక్షణాన్ని నిర్వచించడం మరియు అమలు చేయడం

ఒక లక్షణాన్ని నిర్వచించడానికి, మేము trait కీవర్డ్‌ని ఉపయోగిస్తాము, అలాగే అమలు చేసే రకాలను తప్పనిసరిగా నిర్వచించే పద్ధతుల సంతకాలను ఉపయోగిస్తాము:

Rust
pub trait Summary {
    fn summarize(&self) -> String;
}

కాంక్రీట్ రకంపై లక్షణాన్ని అమలు చేయడానికి, మేము సింటాక్స్ impl TraitName for TypeNameని ఉపయోగిస్తాము:

Rust
pub struct NewsArticle {
    pub headline: String,
    pub content: String,
}

impl Summary for NewsArticle {
    fn summarize(&self) -> String {
        format!("{}", self.headline)
    }
}

లక్షణ హద్దులు

జెనరిక్ ఫంక్షన్‌లను వ్రాస్తున్నప్పుడు, అవి నిర్దిష్ట లక్షణాన్ని అమలు చేస్తున్నాయని నిర్ధారించడానికి మేము టైప్ పారామితులను పరిమితం చేయవచ్చు. ప్రామాణిక సింటాక్స్ <T: Trait>:

Rust
pub fn notify<T: Summary>(item: &T) {
    println!("Notification: {}", item.summarize());
}

ప్రత్యామ్నాయంగా, మరింత సంక్లిష్టమైన సంతకాల కోసం, మేము where నిబంధనను ఉపయోగించవచ్చు:

Rust
pub fn notify_advanced<T>(item: &T)
where
    T: Summary
{
    println!("Notification: {}", item.summarize());
}

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

వ్యాయామం 1: సారాంశ లక్షణం

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

పద్ధతి సంతకం fn సారాంశం(&self) -> స్ట్రింగ్;ని కలిగి ఉన్న సారాంశం అనే లక్షణాన్ని నిర్వచించండి. తర్వాత, స్ట్రింగ్ టైప్ యొక్క హెడ్‌లైన్ ఫీల్డ్‌తో స్ట్రక్ట్ న్యూస్‌ఆర్టికల్‌ను నిర్వచించండి మరియు దాని కోసం సారాంశ లక్షణాన్ని అమలు చేయండి, తద్వారా సారాంశం పద్ధతి హెడ్‌లైన్ ఫీల్డ్ విలువను అందిస్తుంది.

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

`సారాంశం`లక్షణం మరియు`న్యూస్ ఆర్టికల్`నిర్మాణాన్ని నిర్వచించండి. న్యూస్ ఆర్టికల్ కోసం`impl సారాంశం`ఫీల్డ్ క్లోనింగ్`self.headline.clone()`తో అమలు చేయండి.

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

వ్యాయామం 2: ముద్రణ_సారాంశంతో లక్షణాల సరిహద్దులు

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

మునుపటి వ్యాయామం నుండి కోడ్ ఆధారంగా, &T రకం పారామితి అంశాన్ని ఆమోదించే print_summary<T> అనే జెనరిక్ ఫంక్షన్‌ను నిర్వచించండి. T తప్పనిసరిగా సారాంశ లక్షణాన్ని అమలు చేయడానికి కట్టుబడి ఉన్న లక్షణాన్ని వర్తింపజేయండి. ఫంక్షన్ లోపల, item.summarize() ద్వారా తిరిగి వచ్చిన ఫలితాన్ని ప్రింట్ చేయండి.

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

`fn print_summary<T: సారాంశం>(అంశం: &T)`మరియు invoke`item.summarize()`inside the`println!` అనే సంతకాన్ని ఉపయోగించండి.

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

వ్యాయామం 3: లక్షణాలను ఉపయోగించి ప్రాంత గణన

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

fn ప్రాంతం(&self) -> f64; పద్ధతితో ఏరియా అనే లక్షణాన్ని నిర్వచించండి. రకం f64 యొక్క వ్యాసార్థ క్షేత్రాన్ని కలిగి ఉన్న స్ట్రక్ట్ సర్కిల్‌ను సృష్టించండి మరియు ప్రాంతాన్ని లెక్కించడం ద్వారా దాని కోసం ఏరియా లక్షణాన్ని అమలు చేయండి (ఫార్ములా: వ్యాసార్థం * వ్యాసార్థం * 3.14159).

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

`ఏరియా`లక్షణం మరియు`సర్కిల్`నిర్మాణాన్ని నిర్వచించండి. సర్కిల్ ఏరియా సూత్రాన్ని ఉపయోగించి`ఏరియా(&స్వీయం)`ని అమలు చేయండి.

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