capypad
0 Tage Serie
rust / intermediate
Snippet

Struktur-Methoden und assoziierte Funktionen mit impl

Der 'impl'-Block definiert Methoden und assoziierte Funktionen für Strukturen. Assoziierte Funktionen wie 'from_celsius' und 'from_fahrenheit' nehmen kein 'self' und dienen als Konstruktoren, wobei 'Self' als Kurzform für den Strukturtyp verwendet wird. Methoden-Funktionen nehmen '&self' (oder '&mut self'), um auf Instanzdaten zu operieren. Diese Kapselung folgt Rusts objektorientierten Prinzipien und wahrt gleichzeitig Sicherheits- und Ownership-Semantik.

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
struct Temperature {
celsius: f64,
}
 
impl Temperature {
fn from_celsius(celsius: f64) -> Self {
Self { celsius }
}
fn from_fahrenheit(fahrenheit: f64) -> Self {
Self {
celsius: (fahrenheit - 32.0) * 5.0 / 9.0,
}
}
fn to_fahrenheit(&self) -> f64 {
self.celsius * 9.0 / 5.0 + 32.0
}
fn to_kelvin(&self) -> f64 {
self.celsius + 273.15
}
fn format(&self) -> String {
format!("{:.2}°C = {:.2}°F = {:.2}K",
self.celsius,
self.to_fahrenheit(),
self.to_kelvin())
}
}
 
fn main() {
let t1 = Temperature::from_celsius(25.0);
let t2 = Temperature::from_fahrenheit(98.6);
println!("{}", t1.format());
println!("{}", t2.format());
}
Erklärung
1
struct Temperature { celsius: f64 }
Struktur mit einzelnem Feld zur Speicherung der Temperatur in Celsius
2
impl Temperature { ... }
Implementierungsblock für Temperature-Struktur
3
fn from_celsius(celsius: f64) -> Self { Self { celsius } }
Assoziierte Konstruktor-Funktion gibt neue Self-Instanz zurück
4
fn to_fahrenheit(&self) -> f64
Methode mit unveränderlicher Referenz, berechnet Fahrenheit-Umwandlung
5
self.to_fahrenheit()
Aufruf einer anderen Methode auf derselben Instanz
6
Self { celsius }
Self-Kurzschreibweise, äquivalent zu Temperature { celsius }