Rust入門 vol.2

今回はRustの勉強がてらfizzbuzzに取り組んでみます。

まずは公式ページにあるコードで実装。for文とif文の使い方が理解できました。

fn main() {
    for n in 1..101 {
        if n % 15 == 0 {
            println!("fizzbuzz");
        } else if n % 3 == 0 {
            println!("fizz");
        } else if n % 5 == 0 {
            println!("buzz");
        } else {
            println!("{}", n);
        }
    }
}

これだけでは面白くないので、「100まで」の部分を可変にし、コマンド実行時の引数で指定できるようにします。

use std::env;

fn main() {
    let args: Vec<String> = env::args().collect();

    if args.len() < 2 {
        println!("引数を入力してください");
        return;
    }

    let num = match args[1].parse::<i32>() {
        Ok(num) => num,
        Err(_) => {
            println!("正の整数を入力してください");
            return;
        },
    };

    if num < 1 {
        println!("正の整数を入力してください");
        return
    }

    for n in 1..(num + 1) {
        if n % 15 == 0 {
            println!("fizzbuzz");
        } else if n % 3 == 0 {
            println!("fizz");
        } else if n % 5 == 0 {
            println!("buzz");
        } else {
            println!("{}", n);
        }
    }
}

引数を読み取れるようにするために「use std::env;」を先頭で実行しています。

あと引数で指定した値がきちんと正の整数であるかもチェックするようにしています。

確認のためにテストしてみると意図した動作になっていました。

$ docker-compose exec rust ./fizzbuzz
引数を入力してください

$ docker-compose exec rust ./fizzbuzz -1
正の整数を入力してください

$ docker-compose exec rust ./fizzbuzz 0
正の整数を入力してください

$ docker-compose exec rust ./fizzbuzz 1
1

$ docker-compose exec rust ./fizzbuzz 10
1
2
fizz
4
buzz
fizz
7
8
fizz
buzz

$ docker-compose exec rust ./fizzbuzz 10.5
正の整数を入力してください

$ docker-compose exec rust ./fizzbuzz aaa
正の整数を入力してください

たかがfizzbuzzでしたがいい刺激になりました!