Rust言語でFizzBuzzを実装する方法を解説
目次
RustでFizzBuzzを実装する
今回はRustでFizzBuzzを実装してみたいと思います。
↓がコードです。
/// # FizzBuzzプログラム /// /// RustによるFizzBuzzプログラムです。 /// fn main() { for i in 1..101 { if i % 15 == 0 { println!("FizzBuzz"); } else if i % 3 == 0 { println!("Fizz"); } else if i % 5 == 0 { println!("Buzz"); } else { println!("{}", i); } } }
FizzBuzzはどんな問題か?
FizzBuzzはアメリカのゲームです。
長距離トラック運転手の人などがよくやっているそうです。
複数人が順番に1から数を数えていき、3の倍数になったら「Fizz」と言い、5の倍数になったら「Buzz」と言います。
3の倍数かつ5の倍数になったら(つまり15の倍数)「FizzBuzz」と言います。
途中でトチったりためらったりしたらその人は脱落します。
プログラミングで言うFizzBuzzはこのゲームをプログラム的に表現したコードのことを言います。
FizzBuzzのソースコードの解説
FizzBuzzのソースコードの解説をします。
コメント部分
コメントはドキュメントコメントを使っています。
/// # FizzBuzzプログラム /// /// RustによるFizzBuzzプログラムです。 ///
ドキュメントコメントはドキュメントを記述するためのコメントで、スラッシュ(/
)を3つ並べて書きます。
Rustではこのようにソースコードにドキュメントを埋め込むことができます。
ドキュメントをブラウザで見たい場合は
$ cargo doc --open
を実行します。
ドキュメントコメントについては↓の記事で詳しく解説しています。
for文部分
main関数に入ってfor文を書きます。
fn main() { for i in 1..101 { ... } }
↑のfor文はi in 1..101
と書いてありますが、これは「1から101より下までiをカウントする」という意味です。
つまりカウント変数のi
は「1, 2, 3, 4, ... 99, 100」という感じで増えていきます。
FizzBuzzは「1から100まで」カウントしますので、このようなfor文を書きます。
アルゴリズム部分
if文が並んでいる部分がFizzBuzzのアルゴリズム部分です。
if i % 15 == 0 { println!("FizzBuzz"); } else if i % 3 == 0 { println!("Fizz"); } else if i % 5 == 0 { println!("Buzz"); } else { println!("{}", i); }
「i % 15 == 0
」という式は「iを15で割った余りが0だったら真」になるという条件式です。
同様に「i % 3 == 0
」は「iを3で割った余りが0だったら真」になります。
「i % 5 == 0
」は「iを5で割った余りが0だったら真」です。
「%
」という演算子はいわゆる剰余(Mod)を計算する演算子で、これは割り算の親戚です。
この演算子は左辺を右辺で割った余りが求まります。
1つ注意点があるのですが、それはif文の順番です。
↑のコードでは15
の式を一番上に置いてますがこれがけっこう重要です。
たとえば15
の式を2番目や下に持ってきてしまうとどうなるでしょうか?
そうすると3
や5
の式が先に計算されます。
そうすると15
になったときに3
の条件式が先に真になってしまい、FizzBuzzと表示されなくなってしまいます。
これがFizzBuzzのひっかけ部分で、ここを間違える人がけっこう多いらしいです。
各条件式が真になったらprintln!()
で文字列や変数を出力します。
15
の時はFizzBuzz
, 3
の時はFizz
, 5
の時はBuzz
になります。
それ以外の場合はカウント変数i
が出力されます。
おわりに
今回はRustでFizzBuzzを書く方法を解説しました。
FizzBuzzは日本では面接問題として人気がある問題です。
FizzBuzzを書けるようになっておけば面接も突破できるかもしれません。
(^ _ ^) | ちなみに筆者は |
(・ v ・) | 面接でFizzBuzzを間違えたことがあります |