Functions

๋Ÿฌ์ŠคํŠธ ๋ฒ„์ „์˜ FizzBuzz ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค:

A Rust version of the famous FizzBuzz interview question:

fn main() {
    // ํ•˜๋‹จ์ •์˜. ๊ตณ์ด ์ƒ๋‹จ์— ๋ณ„๋„ ์„ ์–ธํ•  ํ•„์š” ์—†์Œ.
    // Defined below, no forward declaration needed
    fizzbuzz_to(20);   
}

fn is_divisible_by(lhs: u32, rhs: u32) -> bool {
    if rhs == 0 {
        // ์ฝ”๋„ˆ ์ผ€์ด์Šค.
        // Corner case, early return
        return false; 
    }
    // ๋งˆ์ง€๋ง‰ ํ‘œํ˜„์‹์€ ๋ฐ˜ํ™˜๊ฐ’์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
    // The last expression is the return value
    lhs % rhs == 0     
}

// `()` ๋ฐ˜ํ™˜๊ฐ’์€ ๋ฐ˜ํ™˜ํ•  ๊ฐ’์ด ์—†์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
// No return value means returning the unit type `()`
fn fizzbuzz(n: u32) -> () {  
    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}"),
    }
}

//๋ฐ˜ํ™˜๊ฐ’์ด ์—†๋Š” ๊ฒฝ์šฐ(`-> ()`) ์ƒ๋žต ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
// `-> ()` is normally omitted
fn fizzbuzz_to(n: u32) {  
    for n in 1..=n {
        fizzbuzz(n);
    }
}

์—ญ์ฃผ

  • corner case: ๋ณตํ•ฉ ๊ฒฝ๊ณ„ ์กฐ๊ฑด. ๋ณ€์ˆ˜์™€ ํ™˜๊ฒฝ์ ์ธ ์š”์†Œ๋กœ ์ธํ•ด์„œ ๋กœ์ง์— ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ. ex. ๋‚˜๋ˆ„๊ธฐ ๋กœ์ง์—์„œ 0์œผ๋กœ ๋‚˜๋ˆ„๋Š” ๊ฒฝ์šฐ.
    • edge case: ๊ฒฝ๊ณ„์กฐ๊ฑด. ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐ’์ด ๊ทน๋‹จ์ ์ธ ์ตœ๋Œ€/์ตœ์†Œ๊ฐ’(๋กœ์ง ์œ ํšจ๋ฒ”์œ„ ๋) ์ด์ƒ์ธ ๊ฒฝ์šฐ.
  • fizzbuzz: ์ˆซ์ž๋ฅผ ์ž…๋ ฅ๋ฐ›์•„์„œ n์œผ๋กœ ๋‚˜๋‰˜๋ฉด fizz, m์œผ๋กœ ๋‚˜๋‰˜๋ฉด buss, ๋‘˜๋‹ค ๋‚˜๋‰˜๋ฉด fizzbuzz, ์•ˆ๋‚˜๋‰˜๋ฉด ์ž…๋ ฅ๊ฐ’์„ ์ถœ๋ ฅํ•˜๋Š” ํ…Œ์ŠคํŠธ๋กœ ์ž์ฃผ ์“ฐ๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ์˜ˆ์ œ์˜ n,m์€ 3,5