Structs als Funktionsparameter
Teil des Abschnitts Logik & Kontrollfluss der Rust-Journey von Coddy. Lektion 24 von 66.
Da du nun weißt, wie man Structs erstellt und verändert, wollen wir erkunden, wie man sie mit Funktionen verwendet. Genau wie jeden anderen Datentyp in Rust kannst du Struct-Instanzen an Funktionen übergeben und sie von Funktionen zurückgeben.
Um eine Struktur an eine Funktion zu übergeben, fügst du sie einfach als Parameter in der Funktionsdefinition ein:
fn calculate_area(rect: Rectangle) -> i32 {
rect.width * rect.height
}Diese Funktion nimmt eine Rectangle-Struktur als Parameter entgegen und gibt einen i32-Wert zurück. Innerhalb der Funktion können Sie auf die Felder der Struktur mithilfe der Punktnotation zugreifen, genau wie an jeder anderen Stelle auch.
Du kannst auch Strukturen aus Funktionen zurückgeben, indem du den Strukturtyp als Rückgabetyp angibst:
fn create_square(size: i32) -> Rectangle {
Rectangle {
width: size,
height: size,
}
}Die Verwendung von Structs mit Funktionen macht Ihren Code organisierter und aussagekräftiger. Anstatt mehrere einzelne Parameter zu übergeben, können Sie zusammengehörige Daten gruppieren und sie als eine einzige, gut definierte Einheit übergeben.
Aufgabe
EinfachDu erhältst vier Eingaben: die Breite eines Rechtecks (als Ganzzahl), die Höhe eines Rechtecks (als Ganzzahl), die Seitenlänge eines Quadrats (als Ganzzahl) und eine Auswahlzahl (1 oder 2). Definiere eine Rectangle-Struktur mit zwei Feldern: width: i32 und height: i32. Erstelle zwei Funktionen: eine, die ein Rectangle entgegennimmt und dessen Fläche berechnet, und eine weitere, die eine Seitenlänge entgegennimmt und ein Rectangle zurückgibt, das ein Quadrat darstellt. Berechne abhängig von der Auswahl die entsprechende Fläche und gib sie aus.
Anforderungen:
- Definiere eine
Rectangle-Struktur mit den Feldern:width: i32undheight: i32 - Erstelle eine Funktion
calculate_area, die einRectangleals Parameter entgegennimmt und eini32(die Fläche) zurückgibt - Erstelle eine Funktion
create_square, die eini32(die Seitenlänge) als Parameter entgegennimmt und einRectanglemit gleicher Breite und Höhe zurückgibt - Lies die erste Eingabe ein und wandle sie für die Breite des Rechtecks in
i32um - Lies die zweite Eingabe ein und wandle sie für die Höhe des Rechtecks in
i32um - Erstelle eine
Rectangle-Instanz mit diesen Abmessungen - Lies die dritte Eingabe ein und wandle sie für die Seitenlänge des Quadrats in
i32um - Lies die vierte Eingabe ein und wandle sie für die Auswahl (1 oder 2) in
i32um - Wenn die Auswahl 1 ist: Berechne die Fläche des Rechtecks und gib sie aus
- Wenn die Auswahl 2 ist: Erstelle mit
create_squareein Quadrat, berechne anschließend dessen Fläche und gib sie aus
Eingabe:
- Erste Zeile: Breite des Rechtecks als Ganzzahl (z. B.
8) - Zweite Zeile: Höhe des Rechtecks als Ganzzahl (z. B.
5) - Dritte Zeile: Seitenlänge des Quadrats als Ganzzahl (z. B.
6) - Vierte Zeile: Auswahl als Ganzzahl, entweder 1 oder 2 (z. B.
1)
Ausgabe:
- Wenn die Auswahl 1 ist:
Rectangle area: [area] - Wenn die Auswahl 2 ist:
Square area: [area]
Probier es selbst
use std::io;
// TODO: Definiere hier das Rectangle-Struct
// TODO: Definiere hier die Funktion calculate_area
// TODO: Definiere hier die Funktion create_square
fn main() {
// Rechteckbreite einlesen
let mut width_input = String::new();
io::stdin().read_line(&mut width_input).expect("Failed to read line");
let width: i32 = width_input.trim().parse().expect("Invalid input");
// Rechteckhöhe einlesen
let mut height_input = String::new();
io::stdin().read_line(&mut height_input).expect("Failed to read line");
let height: i32 = height_input.trim().parse().expect("Invalid input");
// Quadratseitenlänge einlesen
let mut side_input = String::new();
io::stdin().read_line(&mut side_input).expect("Failed to read line");
let side: i32 = side_input.trim().parse().expect("Invalid input");
// Auswahl einlesen
let mut choice_input = String::new();
io::stdin().read_line(&mut choice_input).expect("Failed to read line");
let choice: i32 = choice_input.trim().parse().expect("Invalid input");
// TODO: Schreibe deinen Code unten
// Erstelle eine Rectangle-Instanz, prüfe die Auswahl und berechne die entsprechende Fläche
// Ergebnis basierend auf der Auswahl ausgeben
// Verwende: println!("Rectangle area: {}", area); oder println!("Square area: {}", area);
}Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik & Kontrollfluss
1Fortgeschrittener Kontrollfluss
Der 'match'-AusdruckAbgleichen mehrerer WerteBereiche abgleichenDer 'if let'-AusdruckSchleifen als AusdrückeRückblick – Einfacher Befehls-Parser4Daten gruppieren mit Structs
Was ist ein Struct?Übersicht über StructsZugriff auf Struct-FelderVeränderbare StructsStructs als FunktionsparameterTupel-StructsZusammenfassung – Ein Buch-Struct erstellen2Einführung in Vektoren
Was ist ein Vektor?Einen Vektor erstellenElemente mit push hinzufügenZugriff auf Vektor-ElementeÜber einen Vektor iterierenVeränderliche IterationElemente entfernenZusammenfassung – Einfacher Score-Tracker5Schlüssel-Wert-Paare mit Hash Maps
Was ist eine Hash Map?Erstellen einer Hash MapEinfügen von Schlüssel-Wert-PaarenZugreifen auf WerteIterieren über eine Hash MapAktualisieren eines WertesEntfernen eines PaaresZusammenfassung – Wortzähler8Projekt: Einfaches Artikelinventar
Projekt-SetupEinen Artikel hinzufügenLagerbestand prüfenEinen Artikel verkaufenAlles zusammenfügen11Abschluss-Herausforderungen
Wiederholung - Einzigartige ElementeWiederholung - Benutzerprofil-ValidatorWiederholung - Noten-Zusammenfassung3Kommandozeilen-To-Do-Liste
Projekt-SetupEine Aufgabe hinzufügenAlle Aufgaben anzeigenEine Aufgabe entfernenFinaler CodeÜbe selbstständig: Online-Rust-Compiler