capypad
0 Tage Serie
rust / beginner
Snippet

Assoziierte Funktionen und Konstruktor-Muster

Assoziierte Funktionen sind Methoden, die am Typ selbst angehängt sind, nicht an einer Instanz. Sie werden in impl-Blöcken definiert und oft als Konstruktoren verwendet (wie Rectangle::new). Methoden, die die Instanz ändern müssen, nehmen &mut self, während Methoden, die nur lesen, &self nehmen.

snippet.rs
rust
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
struct Rectangle {
width: u32,
height: u32,
}
 
impl Rectangle {
// Associated function (like a constructor)
fn new(width: u32, height: u32) -> Self {
Rectangle { width, height }
}
// Another associated function for square
fn square(size: u32) -> Self {
Rectangle { width: size, height: size }
}
// Instance method
fn area(&self) -> u32 {
self.width * self.height
}
// Method with mutable reference
fn scale(&mut self, factor: u32) {
self.width *= factor;
self.height *= factor;
}
}
 
fn main() {
let rect = Rectangle::new(30, 50);
let square = Rectangle::square(25);
println!("Rectangle area: {}", rect.area());
println!("Square area: {}", square.area());
let mut scaled_rect = Rectangle::new(10, 10);
scaled_rect.scale(3);
println!("Scaled rectangle: {} x {}", scaled_rect.width, scaled_rect.height);
}
Erklärung
1
fn new(width: u32, height: u32) -> Self
Assoziierte Funktion, die eine neue Rectangle-Instanz zurückgibt; Self bezieht sich auf Rectangle
2
fn square(size: u32) -> Self
Alternativer Konstruktor für ein Quadrat (gleiche Seiten)
3
fn area(&self) -> u32
Methode, die self unveränderlich leiht, um Instanzdaten zu lesen
4
fn scale(&mut self, factor: u32)
Methode, die self veränderlich leiht, um Instanzdaten zu ändern
5
Rectangle::new(30, 50)
Aufruf einer assoziierten Funktion mit :: Syntax auf dem Typnamen