Functions

Functions - Comprehensive Rust 🦀

上記ページより抜粋。

fn main() {
    fizzbuzz_to(20);   // Defined below, no forward declaration needed
}

fn is_divisible_by(lhs: u32, rhs: u32) -> bool {
    if rhs == 0 {
        return false;  // Corner case, early return
    }
    lhs % rhs == 0     // The last expression is the return value
}

fn fizzbuzz(n: u32) -> () {  // No return value means returning the unit type `()`
    match (is_divisible_by(n, 3), is_divisible_by(n, 5)) {
        (true,  true)  => println!("fizzbuzz"),
        (true,  false) => println!("fizz"),
        (false, true)  => println!("buzz"),
        (false, false) => println!("{n}"),
    }
}

fn fizzbuzz_to(n: u32) {  // `-> ()` is normally omitted
    for n in 1..=n {
        fizzbuzz(n);
    }
}
  • main()fizzbuzz_to(20)を呼び出しているが、main()より先に定義しておく必要はない。これはまぁ、他のJavaなどの静的型付け言語と同じか
  • is_divisible_by関数において、 lhs % rhs == 0が最後に評価される式になるため、特にreturnを記述しなくても良い。なるほど。
  • 関数は、fn hoge() -> return typeの形式で宣言するが、返り値がない場合は()を記述する。なお、通常は書かない。