Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

関数

関数は fn キーワードを使って宣言します。その引数には変数と同様に型注釈を付け、関数が値を返す場合は、矢印 -> の後に戻り値の型を指定する必要があります。

関数内の最後の式は戻り値として使用されます。別の方法として、return 文を使うことで、関数内のより早い時点で、ループや if 文の内部からでも値を返せます。

関数を使って FizzBuzz を書き直してみましょう!

// C/C++ とは異なり、関数定義の順序に制限はありません
fn main() {
    // この関数をここで使い、後のどこかで定義できます
    fizzbuzz_to(100);
}

// ブール値を返す関数
fn is_divisible_by(lhs: u32, rhs: u32) -> bool {
    // コーナーケース、早期リターン
    if rhs == 0 {
        return false;
    }

    // これは式なので、ここでは `return` キーワードは不要です
    lhs % rhs == 0
}

// 値を返さ「ない」関数は、実際にはユニット型 `()` を返します
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);
    }
}

// 関数が `()` を返す場合、戻り値の型はシグネチャから省くことができます
fn fizzbuzz_to(n: u32) {
    for n in 1..=n {
        fizzbuzz(n);
    }
}