Schreiben von Rust-Funktionen

Beginner

This tutorial is from open-source community. Access the source code

Einführung

In diesem Lab lernen wir, wie man in Rust Funktionen schreibt. Funktionen werden mit dem Schlüsselwort fn deklariert, und ihre Argumente werden mit Typangaben versehen. Der Rückgabetyp, sofern vorhanden, wird nach einer Pfeilrichtung -> angegeben. Der letzte Ausdruck in der Funktion dient als Rückgabewert, aber der return-Befehl kann verwendet werden, um einen Wert früher zurückzugeben. Das Lab bietet ein Beispiel zur Umgestaltung des FizzBuzz-Programms mit Funktionen, was den Gebrauch von Funktionen zeigt, die boolesche Werte zurückgeben, Funktionen, die den Einheitstyp () zurückgeben, und Funktionen ohne angegebenen Rückgabetyp.

Hinweis: Wenn das Lab keinen Dateinamen angibt, können Sie einen beliebigen Dateinamen verwenden. Beispielsweise können Sie main.rs verwenden und es mit rustc main.rs &&./main kompilieren und ausführen.

Funktionen

Funktionen werden mit dem Schlüsselwort fn deklariert. Ihre Argumente werden wie Variablen mit Typangaben versehen, und wenn die Funktion einen Wert zurückgibt, muss der Rückgabetyp nach einer Pfeilrichtung -> angegeben werden.

Der letzte Ausdruck in der Funktion wird als Rückgabewert verwendet. Alternativ kann der return-Befehl verwendet werden, um einen Wert früher aus der Funktion zurückzugeben, sogar aus innerhalb von Schleifen oder if-Anweisungen.

Schreiben wir FizzBuzz mit Funktionen um!

// Im Gegensatz zu C/C++ gibt es keine Einschränkung für die Reihenfolge der Funktionsdefinitionen
fn main() {
    // Wir können diese Funktion hier verwenden und sie später irgendwo definieren
    fizzbuzz_to(100);
}

// Funktion, die einen booleschen Wert zurückgibt
fn is_divisible_by(lhs: u32, rhs: u32) -> bool {
    // Sonderfall, frühzeitiger Rückgabewert
    if rhs == 0 {
        return false;
    }

    // Dies ist ein Ausdruck, das `return`-Schlüsselwort ist hier nicht erforderlich
    lhs % rhs == 0
}

// Funktionen, die "keinen" Wert zurückgeben, geben tatsächlich den Einheitstyp `()` zurück
fn fizzbuzz(n: u32) -> () {
    if is_divisible_by(n, 15) {
        println!("fizzbuzz");
    } else if is_divisible_by(n, 3) {
        println!("fizz");
    } else if is_divisible_by(n, 5) {
        println!("buzz");
    } else {
        println!("{}", n);
    }
}

// Wenn eine Funktion `()` zurückgibt, kann der Rückgabetyp aus der
// Signatur weggelassen werden
fn fizzbuzz_to(n: u32) {
    for n in 1..=n {
        fizzbuzz(n);
    }
}

Zusammenfassung

Herzlichen Glückwunsch! Sie haben das Lab zu Funktionen abgeschlossen. Sie können in LabEx weitere Labs absolvieren, um Ihre Fähigkeiten zu verbessern.