やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

Rustで数当てゲーム

 わずか29行!

成果物

実行例

$ cargo run
1100までの値を入力してください: 50
大きすぎます!
1100までの値を入力してください: 25
大きすぎます!
1100までの値を入力してください: 12
大きすぎます!
1100までの値を入力してください: 6
小さすぎます!
1100までの値を入力してください: 8
大きすぎます!
1100までの値を入力してください: 7
ぴったり! やったね!

flowchart

コード

 プロジェクト作成。

$ cargo new guessing_game --bin

 ランダム生成ライブラリ導入。

Cargo.toml

[dependencies]
rand="0.6.5"

 ソースコード

main.rs

extern crate rand;
use std::io;
use std::io::Write;
use rand::Rng;
use std::cmp::Ordering;
fn main() {
    let secret_number = rand::thread_rng().gen_range(1, 101);
    loop {
        print!("1〜100までの値を入力してください: ");
        io::stdout().flush().unwrap(); 
        let mut guess = String::new();
        io::stdin().read_line(&mut guess)
            .expect("入力エラー。read_line()で失敗しました。");

        let guess: u32 = match guess.trim().parse() {
            Ok(num) => num,
            Err(_) => continue,
        };

        match guess.cmp(&secret_number) {
            Ordering::Less => println!("小さすぎます!"),
            Ordering::Greater => println!("大きすぎます!"),
            Ordering::Equal => { 
                println!("ぴったり! やったね!");
                break;
            }
        }
    }
}

 実行。

$ cd guessing_game
$ cargo run

所感

  • わずか29行
    • C/C++と比べて遥かに短い
  • ループ、分岐がスマート
    • C/C++if, whileより塊になって読みやすい
  • プロジェクト生成コマンドで楽チン(自動化もできる)

 Rust様ステキ! 書いて!

参考

対象環境

$ uname -a
Linux raspberrypi 4.14.98-v7+ #1200 SMP Tue Feb 12 20:27:48 GMT 2019 armv7l GNU/Linux

前回まで