0Pricing
Learn Rust Coding · Lektion

Closures

Anonyme Funktionen

Closures ist eine kostenlose Learn Rust Coding-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Learn Rust Coding-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Learn Rust Coding-Kurs umfasst insgesamt 4 Lektionen.

Was ist eine Closure?

Eine Closure ist eine anonyme Funktion, die Sie in einer Variablen speichern und später aufrufen können. Sie wird mit senkrechten Strichen um die Parameter geschrieben.

fn main() {
    let add_one = |x| x + 1;
    println!("{}", add_one(4));
}

Closure-Syntax

Die Parameter stehen zwischen |...|, gefolgt vom Funktionskörper. Bei einem einzelnen Ausdruck sind keine geschweiften Klammern erforderlich.

  • |x| x + 1 — ein Parameter.
  • |a, b| a + b — zwei Parameter.
fn main() {
    let multiply = |a, b| a * b;
    println!("{}", multiply(3, 5));
}

Mehrzeilige Closures

Bei mehr als einer Anweisung schließen Sie den Funktionskörper wie bei einer Funktion in geschweifte Klammern ein.

fn main() {
    let describe = |n: i32| {
        let doubled = n * 2;
        println!("{} doubled is {}", n, doubled);
    };
    describe(7);
}

Die Umgebung erfassen

Im Gegensatz zu einer einfachen Funktion kann eine Closure Variablen aus dem umgebenden Gültigkeitsbereich erfassen und innerhalb der Closure verwenden.

fn main() {
    let factor = 10;
    let scale = |x| x * factor;
    println!("{}", scale(5));
}

Typinferenz bei Closures

Closures leiten ihre Parameter- und Rückgabetypen normalerweise daraus ab, wie sie verwendet werden, daher sind Typannotationen optional.

Bei Bedarf können Sie zur besseren Verständlichkeit Typen hinzufügen.

fn main() {
    let greet = |name: &str| -> String {
        format!("Hello, {}!", name)
    };
    println!("{}", greet("Rust"));
}

Closures als Argumente

Viele Standardmethoden akzeptieren eine Closure. Beispielsweise wendet map eine Closure auf jedes Element an.

fn main() {
    let nums = vec![1, 2, 3];
    let doubled: Vec<i32> = nums.iter().map(|x| x * 2).collect();
    println!("{:?}", doubled);
}

Filtern mit Closures

Die Methode filter behält nur die Elemente, für die die Closure true zurückgibt.

fn main() {
    let nums = vec![1, 2, 3, 4, 5, 6];
    let evens: Vec<i32> = nums.into_iter().filter(|x| x % 2 == 0).collect();
    println!("{:?}", evens);
}

Closures speichern

Closures haben eindeutige anonyme Typen, aber Sie können sie in einer Variablen speichern und wiederverwenden.

fn main() {
    let is_even = |n: i32| n % 2 == 0;
    println!("{} {}", is_even(4), is_even(7));
}

Closures und Funktionen im Vergleich

Unterschiede:

  • Funktionen können keine Variablen aus dem umgebenden Gültigkeitsbereich erfassen, Closures dagegen schon.
  • Closures sind anonym und oft kurz.
  • Die Typen von Closures werden normalerweise abgeleitet.
fn main() {
    let base = 100;
    let bonus = |earned: i32| earned + base;
    println!("{}", bonus(25));
}

Berechnete Werte zurückgeben

Kombinieren Sie Closures mit Iteratoren, um Ergebnisse in einer klaren, ausdrucksstarken Pipeline zu berechnen.

fn main() {
    let nums = vec![10, 20, 30];
    let total: i32 = nums.iter().map(|x| x + 1).sum();
    println!("total {}", total);
}

Closures erfassen per Referenz

Standardmäßig leihen sich Closures die erfassten Variablen. Sie können diese danach weiterhin außerhalb lesen, sofern sie nur ausgeliehen wurden.

fn main() {
    let name = String::from("Ada");
    let printer = || println!("Name: {}", name);
    printer();
    println!("still usable: {}", name);
}

Kurze Überprüfung

Rufen Sie sich eine wichtige Fähigkeit von Closures ins Gedächtnis.

Zusammenfassung

Closures in Rust:

  • Anonyme Funktionen in der Form |params| body.
  • Können Variablen aus ihrer Umgebung erfassen.
  • Typen werden normalerweise abgeleitet.
  • Werden häufig mit Iteratormethoden wie map und filter verwendet.
fn main() {
    let tax = 0.2;
    let with_tax = |price: f64| price * (1.0 + tax);
    println!("{}", with_tax(50.0));
}

Häufig gestellte Fragen

Ist die Lektion „Closures“ kostenlos?

Ja — der vollständige Text von „Closures“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Learn Rust Coding-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Learn Rust Coding-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Closures“?

Anonyme Funktionen Du übst Learn Rust Coding mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Learn Rust Coding zu starten?

Keine Vorkenntnisse erforderlich. Learn Rust Coding auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.

Wie lange dauert die Lektion „Closures“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Learn Rust Coding-Lektion Code schreiben und ausführen?

Ja. Jede Learn Rust Coding-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Funktionen definieren
  2. Ausdrücke und Anweisungen
  3. Closures
  4. Fn, FnMut, FnOnce
← Zurück zu Learn Rust Coding