関数 - Rust By Example
Description: Rust by Example (RBE) is a collection of runnable examples that illustrate various Rust concepts and standard libraries.

## 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);
        }
    }