fn main() {
print_fizzbuzz_to(20);
}
fn is_divisible(n: u32, divisor: u32) -> bool {
if divisor == 0 {
return false;
}
n % divisor == 0
}
fn fizzbuzz(n: u32) -> String {
let fizz = if is_divisible(n, 3) { "fizz" } else { "" };
let buzz = if is_divisible(n, 5) { "buzz" } else { "" };
if fizz.is_empty() && buzz.is_empty() {
return format!("{n}");
}
format!("{fizz}{buzz}")
}
fn print_fizzbuzz_to(n: u32) {
for i in 1..=n {
println!("{}", fizzbuzz(i));
}
}
- 반환값이 없는 함수의 경우, 유닛 타입
()
을 반환한다.-> ()
가 생략된 경우 컴파일러는 이를 추론한다. fizzbuzz_to()
함수 내 for 반목문의 범위 표현식 중=n
은 n까지 포함한다는 의미이다.
struct Rectangle {
width: u32,
height: u32,
}
impl Rectangle {
fn area(&self) -> u32 {
self.width * self.height
}
fn inc_width(&mut self, delta: u32) {
self.width += delta;
}
}
-
메서드는 특정 타입과 연결된 함수이다.
-
메서드의 self 인자가 그 메서드가 연결된 인스턴스의 타입이다.
-
Rust에서는 기술적으로 커스텀 생성자를 직접 지원하지는 않는다. (참고)
-
오버로딩은 지원되지 않는다.
-
파라미터의 기본 값이 지원되지 않는다. 이런 사항들이 제약이 될 경우, 대안으로 매크로를 사용하기도 한다.
-
하지만, 함수의 매개변수에 제네릭을 적용할 수 있다.
fn pick_one<T>(a: T, b: T) -> T { if std::process::id() % 2 == 0 { a } else { b } } fn main() { println!("coin toss: {}", pick_one("heads", "tails")); println!("cash prize: {}", pick_one(500, 1000)); }
참고