8 Functions
함수들은 fn 키워드를 사용하여 선언된다. 그의 인자들은 변수처럼, 타입 주해되어야 하고, 만약 함수가 반환하는 값이 있다면, 반환 타입은 반드시 화살 -> 뒤에 명시되어야 한다.
함수의 마지막 표현은 반환 값을 위해 사용될 것이다. 그렇지 않으면, return 문은 그 전에 반복문 내부 혹은 if문 중에서 반환하기 위해 사용될 수 있다.
FizzBuzz를 함수를 사용해 다시 작성해보자!
// C/C++과는 다르게, 함수 정의에 순서 제약이 없다.
fn main() {
// 여기에서 함수를 사용하고 이후에 어디든 정의하면 된다.
fizzbuzz_to(100);
}
// boolean 값을 리턴하는 함수
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 + 1 {
fizzbuzz(n);
}
}