if文, loopを使わないfizzbuzzプログラム : Rust編

if文, loopを使わないfizzbuzzプログラム : Rust編


donald chi / 2019-05-11 21:27

音声ファイル作成中...
Audio: Visited: 57


背景

The Rust Programming Language, 2018 Edition(和訳: プログラミング言語 Rust, 第2版)を参考にRustの勉強をしています。

6章まで勉強したことろで、何か簡単なプログラムを作って見ようと思い、エンジニアの面接試験などでもよく出ているfizzbuzzプログラムを書いて見ました。

fizzbuzz問題紹介はことらへ

条件

if文とloopを使わないこと

考え方

  1. match 制御フロー演算子で if文を代替
  2. 再帰関数を使ってloop文を代替
  3. (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);
}

感想

しょぼいプログラムではありますが、パターンマッチに慣れていない僕にとっては良いチャレンジでした。


0

0

Share with: Facebook Twitter Google+ LinkedIn Wechat Email Print

Comments: 0 件

There is no Comment now.

Add Comment

Name:
Email:
Comment: