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
の形式で宣言するが、返り値がない場合は()
を記述する。なお、通常は書かない。