Lecții din modul (2/2)
Metode și blocuri impl
În Rust, metodele sunt similare cu funcțiile, dar sunt definite în contextul unei structuri (sau unei enumerari sau trăsături), iar primul lor parametru este întotdeauna self, care reprezintă instanța structurii pe care metoda este apelată.
Definirea metodelor cu impl
Pentru a defini metode pe o structura, folosim un bloc impl (implementare) cu numele structurii:
struct Rectangle {
width: u32,
height: u32,
}
impl Rectangle {
// This is an instance method. It takes &self for reading.
fn area(&self) -> u32 {
self.width * self.height
}
}
fn main() {
let rect = Rectangle { width: 30, height: 50 };
// Call the method using dot notation
println!("The area is: {}", rect.area());
}Funcții (statice) asociate
Funcțiile definite într-un bloc impl care nu acceptă self ca prim parametru se numesc funcții asociate (echivalent cu metodele statice în alte limbi).
Ele sunt adesea folosite ca constructori pentru a returna instanțe noi ale structurii. Pentru a le apela, utilizați sintaxa două puncte :::
impl Rectangle {
// Associated function
fn square(size: u32) -> Rectangle {
Rectangle {
width: size,
height: size,
}
}
}
fn main() {
// Call the associated function
let sq = Rectangle::square(10);
}Metode care modifică starea: &mut self
Dacă o metodă trebuie să modifice câmpurile structurii, trebuie să declare primul parametru ca &mut self. Instanța în sine pe care este apelată metoda trebuie să fie declarată ca mutabilă (let mut):
impl Rectangle {
fn double_size(&mut self) {
self.width *= 2;
self.height *= 2;
}
}Încercați-l singur
Completați blocul impl definind metoda zonei care ia &self și returnează u32 (înmulțirea lățimii și înălțimii).
Afișează indiciu
Scrieți `fn area(&self) -> u32 { self.width \* self.height }`în interiorul blocului`impl Rectangle`.
Soluție disponibilă după 3 încercări
Definiți funcția asociată pătratului în interiorul impl Rectangle, care primește dimensiunea: u32 și returnează o instanță Rectangle cu lățime și înălțime egale cu dimensiunea.
Afișează indiciu
Scrieți `fn pătrat(dimensiune: u32) -> Dreptunghi { Dreptunghi { lățime: dimensiune, înălțime: dimensiune } }`în interiorul blocului`impl`.
Soluție disponibilă după 3 încercări
Adăugați metoda scale mutator la Rectangle în interiorul blocului impl. Metoda scalei trebuie să ia o referință mutabilă la sine (&mut self) și un factor: parametrul u32 și să înmulțească atât lățimea, cât și înălțimea dreptunghiului cu factor.
Afișează indiciu
Implementați `fn scale(&mut self, factor: u32)`pentru a actualiza`self.width` și`self.height` înmulțindu-le cu`factor`.
Soluție disponibilă după 3 încercări