PR3-Rust-SS26/B-basics/9-funktionen.rs

59 lines
1.7 KiB
Rust

fn main() {
// Das ist die Main Funktion
// Diese Funktion wird beim Aufruf von rust-script und von cargo run ausgeführt
println!("{:?}", add(400, 20));
odd(67);
random_ausgabe();
// Durch STRUCTNAME::METHODENNAME() können die Funktionen aufgerufen werden, bspw ein Konstruktor um ein neues Struct zu erzeugen
let mut r = Rechteck::new(400.0, 20.0);
r.skalieren(4.0);
println!("{:?}", r.flaeche());
}
// Das ist eine Funktion, die ein Boolean zurück gibt, Parameter können in die Klammern geschrieben werden
// Der zurückgebende Typ wird nach einem -> geschrieben
fn add(a: i32, b: i32) -> i32 {
a + b // implizites return aka wenn der letzte Ausdruck einer Methode kein ; und kein return hat, wird dieses returnt
}
// Diese Funktion hat auch einen Rückgabewert, und zwar den Unit Typ "()"
fn odd(a: i32) -> () {
if a % 2 == 1 {
println!("Ist ungerade");
} else {
println!("Ist gerade");
}
}
// Man kann das -> auch weglassen, dann wird automatisch die Unit zurück gegeben
fn random_ausgabe() {
println!("Funktion ohne Parameter und \"ohne\" Rückgabewert");
}
struct Rechteck {
hoehe: f64,
breite: f64,
}
// Ein impl, damit der Struct nicht ohne Nutzen ist
impl Rechteck {
// Self (mit GROßEM S) == Klassenname in Java
fn new(breite: f64, hoehe: f64) -> Self {
Rechteck {
breite: breite,
hoehe: hoehe,
} // wieder implizit
}
// Aufruf durch referenz.flaeche
// self (mit KLEINEM s) == this in Java
fn flaeche(&self) -> f64 {
self.hoehe * self.breite // auch implizit
}
fn skalieren(&mut self, s: f64) {
self.hoehe *= s;
self.breite *= s;
}
}