背景
The Rust Programming Language, 2018 Edition(和訳: プログラミング言語 Rust, 第2版)を参考にRustの勉強をしています。
6章まで勉強したことろで、何か簡単なプログラムを作って見ようと思い、エンジニアの面接試験などでもよく出ているfizzbuzzプログラムを書いて見ました。
fizzbuzz問題紹介はことらへ
条件
if文とloopを使わないこと
考え方
match
制御フロー演算子でif
文を代替- 再帰関数を使って
loop
文を代替 (Rustの構造体定義により)構造体を使ってfizzbuzzゲームを定義
構造体は、意味のあるグループを形成する複数の関連した値をまとめ、 名前付けできる独自のデータ型です。
構造体により、自分の領域で意味のある独自の型を作成することができます。 構造体を使用することで、 関連のあるデータ片を相互に結合させたままにし、 各部品に名前を付け、コードを明確にすることができます。
ソースコード
fn fizz_buzz(x:u64) {
match (x%3==0, x%5==0) {
(true, true) => print!("FizzBuzz, "),
(true, false) => print!("Fizz, "),
(false, true) => print!("Buzz, "),
(false, false) => print!("{}, ", x),
}
}
struct FizzBuzzGame {
Start: u64,
Steps: u64,
}
impl FizzBuzzGame {
fn Play(&self, step: u64) {
match (self.Steps - step) {
0 => println!(" "),
_ => {
fizz_buzz(step);
self.Play(step+1);
}
}
}
}
fn main() {
let game = FizzBuzzGame{Start:1, Steps:30};
game.Play(game.Start);
}
感想
しょぼいプログラムではありますが、パターンマッチに慣れていない僕にとっては良いチャレンジでした。