Einführung
Eine Funktion gibt einer Aufgabe einen Namen, damit ein Programm diese Aufgabe bei Bedarf aufrufen kann. Funktionen können Eingaben über Parameter erhalten und einen berechneten Wert zurückgeben.
In diesem Lab enthält ein vorbereitetes Cargo-Projekt bereits drei Konvertierungsfunktionen und alle zugehörigen Aufrufe. Sie ersetzen in jedem Schritt jeweils einen Platzhalterausdruck. Dadurch bleibt die Eingabe überschaubar, während Sie sehen, wie Funktionsdefinitionen, Parameter, Rückgabetypen, Ausdrücke und Aufrufe zusammenwirken.
Einen Wert aus einer Funktion zurückgeben
In diesem Schritt vervollständigen Sie eine Funktion, die Minuten in Sekunden umrechnet, und verbinden ihre Definition mit ihrem Aufruf.
Wechseln Sie in das vorbereitete Projekt und öffnen Sie die Quelldatei:
cd /home/labex/project/conversion-tool
nano src/main.rs
Am Anfang beginnt diese Zeile eine Funktionsdefinition:
fn minutes_to_seconds(minutes: i32) -> i32 {
fnleitet eine Funktion ein.minutes_to_secondsist der Name der Funktion.minutes: i32ist ein Parameter: eine Eingabe mit dem Namenminutesund dem Ganzzahltypi32.-> i32gibt an, dass die Funktion einen Wert vom Typi32zurückgibt.- Die geschweiften Klammern enthalten den Funktionsrumpf.
Rust überprüft jeden Aufruf anhand dieser Signatur. Ein Aufrufer muss die erwartete Anzahl von Argumenten in der deklarierten Reihenfolge übergeben. Jedes Argument muss außerdem einen kompatiblen Typ besitzen.
Ersetzen Sie nur die 0 vor dem Kommentar zu Schritt 1 durch:
minutes * 60 // Step 1: replace this placeholder expression.
Beachten Sie, dass minutes * 60 kein Semikolon enthält. Der Ausdruck ist der letzte Ausdruck im Funktionsrumpf. Sein Wert wird deshalb zum Rückgabewert der Funktion. Ein Semikolon würde ihn in eine Anweisung umwandeln, die diesen Wert nicht zurückgibt.
Speichern Sie mit Strg+O, drücken Sie die Eingabetaste und beenden Sie den Editor mit Strg+X. Überprüfen Sie den Code:
cargo check
In main ist minutes_to_seconds(5) ein Funktionsaufruf. Der Wert 5 ist das Argument, das an den Parameter minutes übergeben wird. Führen Sie das Programm aus:
cargo run --quiet
Die erste Zeile sollte nun so aussehen:
5 minutes = 300 seconds
Einen Dezimalparameter und Rückgabetyp verwenden
In diesem Schritt vervollständigen Sie eine zweite Funktion, die Gleitkommawerte akzeptiert und zurückgibt.
Öffnen Sie die Quelldatei:
nano src/main.rs
Suchen Sie celsius_to_fahrenheit. Der Parameter und der Rückgabetyp sind beide f64, sodass die Berechnung ein Ergebnis mit Nachkommastellen beibehalten kann. Der vorläufige Ausdruck celsius * 0.0 verwendet den Parameter, gibt aber absichtlich den Wert null zurück. Ersetzen Sie diesen vollständigen Ausdruck durch:
celsius * 9.0 / 5.0 + 32.0 // Step 2: replace this placeholder expression.
Auch hier wird ein Ausdruck zurückgegeben: Der berechnete Wert steht als letztes Element im Funktionsrumpf und hat kein Semikolon. Multiplikation und Division werden gemäß der üblichen Rechenreihenfolge vor der Addition ausgewertet. Klammern können eine komplexere gewünschte Reihenfolge ausdrücklich festlegen. Der Aufrufer muss die Formel nicht kennen. Er übergibt einen Celsius-Wert und erhält den berechneten Fahrenheit-Wert zurück.
Speichern Sie die Datei, beenden Sie den Editor und führen Sie das Programm aus:
cargo run --quiet
Die zweite Zeile sollte so aussehen:
20.0 C = 68.0 F
Der Aufruf celsius_to_fahrenheit(20.0) übergibt ein Argument. Der zurückgegebene Wert wird vor der Formatierung für die Ausgabe in der Bindung fahrenheit gespeichert.
Eine Funktion mit mehreren Argumenten wiederverwenden
In diesem Schritt vervollständigen Sie eine Funktion mit zwei Parametern und beobachten, wie zwei Aufrufe dieselbe Funktion wiederverwenden.
Die vorbereitete Funktion scale_amount erhält die Parameter amount und factor. Parameter werden durch Kommas getrennt, und jeder Parameter besitzt seinen eigenen Typ. Ein Aufruf muss die Argumente in derselben Reihenfolge übergeben.
Öffnen Sie die Datei und suchen Sie den Platzhalter für Schritt 3:
nano src/main.rs
Der vorläufige Ausdruck amount * factor * 0.0 gibt absichtlich den Wert null zurück. Ersetzen Sie diesen vollständigen Ausdruck durch:
amount * factor // Step 3: replace this placeholder expression.
Speichern Sie die Datei und beenden Sie den Editor. Führen Sie anschließend die abschließende Prüfung aus:
cargo check
Führen Sie das vervollständigte Programm aus:
cargo run --quiet
Dieselbe Funktion wird einmal für Mehl und einmal für Wasser aufgerufen. Die letzten beiden Zeilen sollten so aussehen:
Scaled flour: 375.0 g
Scaled water: 270.0 ml
Das ist der wichtigste Vorteil einer Funktion: Die Berechnung wird einmal definiert, erhält einen eindeutigen Namen und kann mit verschiedenen Argumenten wiederverwendet werden.
Zusammenfassung
Sie haben Funktionen mit Ganzzahl- und Gleitkommaparametern vervollständigt, Rückgabetyp-Pfeile gelesen, Werte mithilfe abschließender Ausdrücke zurückgegeben, Argumente in Funktionsaufrufen übergeben und eine Funktion für mehrere Berechnungen wiederverwendet.



