Menu
Coddy logo textTech

Die Umgebung erfassen

Teil des Abschnitts Logic & Flow der Rust-Journey von Coddy — Lektion 62 von 66.

Eine der mächtigsten Funktionen von Closures ist ihre Fähigkeit, Variablen aus ihrer umgebenden Umgebung zu erfassen und zu verwenden. Im Gegensatz zu regulären Funktionen können Closures Variablen „sehen“ und auf sie zugreifen, die in demselben Scope existieren, in dem sie definiert wurden.

So funktioniert das Erfassen der Umgebung (Environment Capture):

fn main() {
    let x = 10;
    
    let my_closure = || {
        println!("The value of x is: {}", x);
    };
    
    my_closure(); // Dies wird "The value of x is: 10" ausgeben
}

In diesem Beispiel erfasst das Closure die Variable x aus dem umgebenden Scope und verwendet sie innerhalb seines Bodys. Das Closure muss x nicht als Parameter übergeben bekommen – es hat automatisch Zugriff darauf.

Du kannst auch Variablen erfassen und sie in Berechnungen verwenden:

let multiplier = 3;
let multiply_by_three = |num| num * multiplier;
let result = multiply_by_three(5); // result ist 15
challenge icon

Aufgabe

Einfach

Sie erhalten zwei Eingaben. Die erste Eingabe ist eine Zahl, die einen Basispreis darstellt. Die zweite Eingabe ist eine Zahl, die einen Rabattprozentsatz darstellt. Erstellen Sie eine Closure, die den Rabattprozentsatz aus der Umgebung erfasst und den Endpreis nach Anwendung des Rabatts berechnet. Rufen Sie die Closure mit dem Basispreis auf und geben Sie den Endpreis aus.

Anforderungen:

  • Lesen Sie die erste Eingabe (Basispreis) ein und entfernen Sie Leerzeichen
  • Parsen Sie diese zu f64
  • Lesen Sie die zweite Eingabe (Rabattprozentsatz) ein und entfernen Sie Leerzeichen
  • Parsen Sie diese zu f64
  • Erstellen Sie eine Closure, die einen Parameter (den Basispreis) entgegennimmt und den Rabattprozentsatz aus der Umgebung erfasst
  • Die Closure sollte den Endpreis mit der Formel berechnen: base_price - (base_price * discount / 100.0)
  • Rufen Sie die Closure mit dem Basispreis auf
  • Geben Sie den Endpreis aus

Eingabe:

  • Erste Zeile: Ein Basispreis (z. B. 100.0)
  • Zweite Zeile: Ein Rabattprozentsatz (z. B. 20.0)

Ausgabe:

  • Der Endpreis nach Anwendung des Rabatts

Spickzettel

Closures können Variablen aus ihrer Umgebung erfassen und verwenden, ohne dass diese als Parameter übergeben werden müssen.

Einfaches Erfassen der Umgebung:

let x = 10;

let my_closure = || {
    println!("The value of x is: {}", x);
};

my_closure(); // Prints "The value of x is: 10"

Erfassen von Variablen in Berechnungen:

let multiplier = 3;
let multiply_by_three = |num| num * multiplier;
let result = multiply_by_three(5); // result is 15

Die Closure erfasst multiplier automatisch aus dem umgebenden Gültigkeitsbereich und verwendet die Variable in der Berechnung.

Probier es selbst

use std::io;

fn main() {
    // Basispreis einlesen
    let mut base_price_input = String::new();
    io::stdin().read_line(&mut base_price_input).expect("Failed to read line");
    let base_price: f64 = base_price_input.trim().parse().expect("Invalid number");
    
    // Rabattprozentsatz einlesen
    let mut discount_input = String::new();
    io::stdin().read_line(&mut discount_input).expect("Failed to read line");
    let discount: f64 = discount_input.trim().parse().expect("Invalid number");
    
    // TODO: Erstelle einen Closure, der den Rabatt erfasst und den Endpreis berechnet
    // TODO: Rufe den Closure mit dem Basispreis auf
    
    // Den Endpreis ausgeben
    // println!("{}", final_price);
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logic & Flow