Einführung
Programme werden nützlich, wenn sie zwischen Alternativen wählen und eine Berechnung für mehrere Werte wiederholen können. Rust verwendet boolesche Bedingungen für Entscheidungen und Schleifen für kontrollierte Wiederholungen.
In diesem Lab vervollständigen Sie vier kleine Teile einer vorbereiteten Versandübersicht. In jedem Schritt ändern Sie nur einen bestimmten Ausdruck: einen Vergleich, zwei Verzweigungsergebnisse, einen Ausdruck für eine laufende Summe und eine Annahmebedingung.
Einen booleschen Vergleich erstellen
In diesem Schritt vergleichen Sie das Gewicht eines Pakets mit einem Grenzwert und speichern das Ergebnis als Wahrheitswert.
Wechseln Sie in das vorbereitete Projekt und öffnen Sie die Quelldatei:
cd /home/labex/project/shipping-summary
nano src/main.rs
Der Vergleichsoperator == prüft, ob zwei Werte gleich sind. Das unterscheidet sich vom einzelnen =, das Sie zuvor zum Speichern oder Zuweisen eines Werts verwendet haben. Der vorbereitete Vergleich ergibt false, weil 12 nicht gleich 10 ist. Für den Bericht gilt ein Paket als schwer, wenn sein Gewicht größer als der Grenzwert ist.
Ersetzen Sie in der Zeile für Schritt 1 ausschließlich == durch den Größer-als-Operator >:
let is_heavy = package_weight > heavy_limit; // Step 1
Der Vergleich erzeugt den booleschen Wert true, der in is_heavy gespeichert wird. Speichern Sie mit Ctrl+O, drücken Sie Enter und beenden Sie nano mit Ctrl+X. Führen Sie anschließend das Programm aus:
cargo run --quiet
Die erste Zeile sollte nun so aussehen:
Heavy package: true
Mit einem if-Ausdruck einen Wert auswählen
In diesem Schritt verwenden Sie einen if-Ausdruck, um das Versandetikett auszuwählen.
Ein if prüft eine boolesche Bedingung. Wenn die Bedingung true ist, wertet Rust den ersten Block aus. Andernfalls wertet Rust den else-Block aus. In Rust kann if ein Ausdruck sein, der einen Wert erzeugt. Beide Verzweigungen erzeugen hier Text, sodass der ausgewählte Text shipping_label zugewiesen werden kann. Da der gesamte if-Ausdruck zu einem gespeicherten Wert wird, müssen seine Verzweigungen kompatible Datentypen liefern.
Öffnen Sie die Datei:
nano src/main.rs
Ersetzen Sie in der Zeile für Schritt 2 das erste "unknown" durch "Freight" und das zweite durch "Standard":
let shipping_label = if is_heavy { "Freight" } else { "Standard" }; // Step 2
Rust benötigt keine Klammern um die Bedingung. Die geschweiften Klammern trennen die beiden möglichen Ergebnisse eindeutig.
Speichern und beenden Sie die Datei. Führen Sie anschließend den Bericht aus:
cargo run --quiet
Da is_heavy den Wert true hat, sollte die zweite Zeile so aussehen:
Shipping label: Freight
Werte mit einer for-Schleife addieren
In diesem Schritt verwenden Sie eine begrenzte for-Schleife und einen inklusiven Wertebereich, um eine laufende Summe zu bilden.
Der Wertebereich 3..=6 steht für die ganzen Zahlen von 3 bis 6, einschließlich beider Grenzwerte. Eine for-Schleife nimmt nacheinander jeden Wert aus diesem Bereich und bezeichnet ihn innerhalb des Schleifenkörpers vorübergehend als weight.
Der veränderbare Wert total_weight beginnt bei null. Bei jeder Wiederholung soll die Schleife den aktuellen Wert von weight zur bestehenden Summe addieren.
Öffnen Sie die Datei und suchen Sie die Zeile für Schritt 3:
nano src/main.rs
Ersetzen Sie ausschließlich weight * 0 durch weight:
total_weight = total_weight + weight; // Step 3
Speichern und beenden Sie die Datei. Überprüfen Sie anschließend den Code:
cargo check
Führen Sie den Bericht aus:
cargo run --quiet
Die Schleife addiert 3 + 4 + 5 + 6. Daher sollte folgende Ausgabe erscheinen:
Total weight: 18
Innerhalb einer Schleife eine Entscheidung treffen
In diesem Schritt kombinieren Sie eine Wiederholung mit einer Entscheidung, um angenommene Bestellungen zu zählen.
Die zweite Schleife verarbeitet ebenfalls die Gewichte 3 bis 6. Eine Bestellung wird angenommen, wenn ihr Gewicht kleiner oder gleich 5 ist. Der Operator <= bedeutet kleiner oder gleich.
Öffnen Sie die Datei und suchen Sie die Zeile für Schritt 4:
nano src/main.rs
Ersetzen Sie den vorläufigen Vergleich weight < 0 durch:
let is_accepted = weight <= 5; // Step 4
Das folgende if wird als Anweisung verwendet: Wenn is_accepted den Wert true hat, erhöht der zugehörige Block den Zähler. Ein else ist nicht erforderlich, weil abgelehnte Bestellungen hier keine Aktion auslösen.
Speichern und beenden Sie die Datei. Führen Sie anschließend den vollständigen Bericht aus:
cargo run --quiet
Die Gewichte 3, 4 und 5 werden angenommen, während 6 nicht angenommen wird. Die vollständige Ausgabe sollte so aussehen:
Heavy package: true
Shipping label: Freight
Total weight: 18
Accepted orders: 3
Zusammenfassung
Sie haben boolesche Vergleiche erstellt, mit einem if-Ausdruck einen Wert ausgewählt, mit einer for-Schleife und einem inklusiven Wertebereich Arbeit wiederholt, eine laufende Summe geführt und innerhalb einer Schleife eine Entscheidung getroffen, um passende Werte zu zählen.



