学生の備忘録なブログ

日々のことを忘れないためのブログです。一日一成果物も目標。技術系はQiitaにあげるように変更しました。

RustでFizzBuzz

実践Rust入門から離れて

自転車本は作りながらとりあえず作ってそれを部分的に後で解説していくみたいな構成なのですが、それが辛くなってきたので、

FizzBuzz

pythonのように、レンジイテレータを使ってfor文を書くことができる。

usizeは符号なしの可変サイズ整数の型らしい。桁が細かくu32,u64などがあるのは知っていたが、大雑把な型もあるのはいい。

fn fizzbuzz(n: usize){
    for i in 0..n {
        if i % 15 == 0 {
            println!("FizzBuzz");
        } else if i % 3 == 0 {
            println!("Fizz");
        } else if i % 5 == 0 {
            println!("Buzz");
        } else {
            println!("{}", i);
        }
    }
}



fn main() {
    fizzbuzz(20);
}

エラー文

Rustはどうやら数値を返す時、strにしなければならないらしい。

コンパイラが賢いので、どうやって書けばいいかも教えてれる。すごい。

このフォーマットの書き方もpythonと似ている。

   Compiling fizzbuzz v0.1.0 (/Users/e155755/Documents/Rust/fizzbuzz)
error: format argument must be a string literal
  --> src/main.rs:11:22
   |
11 |             println!(i);
   |                      ^
help: you might be missing a string literal to format with
   |
11 |             println!("{}", i);
   |                      ^^^^^

error: aborting due to previous error

error: Could not compile `fizzbuzz`.

To learn more, run the command again with --verbose.
The terminal process terminated with exit code: 101

Terminal will be reused by tasks, press any key to close it.

pythonで書いてみた

pythonはformat()メソッドで表示することもできるし、そのまま文字列リテラルで表示することもできる。

>>> def fizzbuzz(n):
...     for i in range(n):
...             if i % 15 == 0:
...                     print("FizzBuzz")
...             elif i % 3 == 0:
...                     print("Fizz")
...             elif i % 5 == 0:
...                     print("Buzz")
...             else:
...                     print("{}".format(i))
...
>>> fizzbuzz(20)
FizzBuzz
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
16
17
Fizz
19

参考文献

最速で知る! プログラミング言語Rustの基本機能とメモリ管理【第二言語としてのRust】 - エンジニアHub|若手Webエンジニアのキャリアを考える!