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; } }