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

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

Traits define the behavior that a particular type has and can share with other types. We can use traits to define a set of methods that represent a certain common functionality or interface, similar to interfaces in other programming languages.

Trait bounds allow us to specify that a generic type must implement a specific trait, ensuring that the required methods are available at compile time.


Defining and Implementing a Trait

To define a trait, we use the trait keyword followed by the signatures of the methods that implementing types must define:

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

To implement a trait on a concrete type, we use the syntax impl TraitName for TypeName:

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

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

Trait Bounds

When writing generic functions, we can constrain the type parameters to ensure they implement a specific trait. The standard syntax is <T: Trait>:

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

Alternatively, for more complex signatures, we can use the where clause:

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

Try it yourself

Exercise 1: The Summary Trait

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

Define a trait named Summary containing the method signature fn summarize(&self) -> String;. Next, define a struct NewsArticle with a headline field of type String and implement the Summary trait for it so that the summarize method returns the value of the headline field.

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

Define the `Summary`trait and the`NewsArticle`struct. Implement with`impl Summary for NewsArticle`cloning the field`self.headline.clone()`.

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

Exercise 2: Trait Bounds with print_summary

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

Based on the code from the previous exercise, define a generic function named print_summary<T> that accepts a parameter item of type &T. Apply a trait bound so that T must implement the Summary trait. Inside the function, print the result returned by item.summarize().

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

Use the signature `fn print_summary<T: Summary>(item: &T)`and invoke`item.summarize()`inside the`println!`.

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

Exercise 3: Area Calculation using Traits

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

Define a trait named Area with the method fn area(&self) -> f64;. Create a struct Circle containing a radius field of type f64, and implement the Area trait for it by calculating the area (formula: radius * radius * 3.14159).

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

Define the `Area`trait and the`Circle`struct. Implement`area(&self)` using the circle area formula.

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