Ccmmutty logo
Commutty IT
5 min read

【Rust】the bookをあえてJupyter Notebookで学習していく2

https://cdn.magicode.io/media/notebox/439f01b3-1a7c-492d-a157-a7eeb0686159.jpeg

この記事を読む前に

こちらの記事はRustのthe bookをJupyter Notebookで学習していこう、というとてもマニアックな記事です。 【Rust】the bookをあえてJupyter Notebookで学習していく1で環境構築の方法を記載してますのでご一読ください。

前提

Rustにはthe bookという公式の学習ドキュメントがあります。 ここでは筆者がthe bookをJupyter Notebookで進める上でthe book通りに出来なかったものをどう解決したかをまとめ記載していきます。細かい文法の解説はthe bookにあるのでそちらをご覧ください。 何故Jupyter Notebookか?それはJupyter NotebookでやればそのままMagicodeの記事にできるためです。それ以外の理由はありません...

想定読者

読者は他のプログラミング言語の知識がある程度ある方を想定しています。

環境

筆者の環境はM1 Macbook Air(2020)です。Windowsではないため、Windowsの方はthe bookを参考に環境構築をお願いします。Macの方は【Rust】the bookをあえてJupyter Notebookで学習していく1を参考に環境構築をしてください。

数当てゲームのプログラミング

本記事ではthe bookの2章を学習していきます。2章は数当てゲームのプログラミングを作成する章で、ゲームを作成しながらRustの変数宣言等の基礎を学ぶ章になってます。

最初に完成形を

最初に完成形をお見せします。理由は完成形を元に説明をしていくためです。ちなみにMgicode上では実行できませんので本記事をDLし自身のJupyter Notebookでお試しください。また数当てゲームのプログラミングのコードとは若干異なりますのでご注意を。
// the bookと違う点①
python
:dep rand = { rand = "0.9.0" }
:dep evcxr_input
python
use rand::Rng;
use std::cmp::Ordering;
use std::{thread, time};

let secret_number = rand::thread_rng().gen_range(1..6);

loop {
    // the bookと違う点②
    let mut guess = evcxr_input::get_string("数字を予想し入力してください");    // Rustの変数は不変が原則なので可変にしたい場合はmutを明示

    let guess: u32 = match guess.trim().parse() {   // 標準入力から受け取ったのはstring型なのでu32型に変換
        Ok(num) => num,                             // 型変換が成功ならguessに格納
        Err(_) => continue,                         // 型変換が失敗ならloop振出しに
    };

    println!("予想: {}", guess);

    // the bookと違う点③
    thread::sleep(time::Duration::from_millis(1000));

    match guess.cmp(&secret_number) {                   // guessとsecret_numberの比較
        Ordering::Less => println!("小さ過ぎます!"),      // guess < secret_numberの場合
        Ordering::Greater => println!("大き過ぎます!"),   // guess > secret_numberの場合
        Ordering::Equal => {                            // guess = secret_numberの場合
            println!("正解です!");
            break;
        }
    }

    // the bookと違う点③
    thread::sleep(time::Duration::from_millis(1000));
}

予想: 1 小さ過ぎます! 予想: 2 小さ過ぎます! 予想: 3 小さ過ぎます! 予想: 4 小さ過ぎます! 予想: 5 正解です!
()

the bookと違う点①

違う点の1つ目は「ライブラリのインストール方法」です。数当てゲームのプログラミングに記載の方法では出来ず、:dep 変数名 = { ライブラリ名 = "バージョン" }でインストールすることができます。下記2行はそれぞれライブラリのインストールをしています。
:dep rand = { rand = "0.9.0" }  // 擬似乱数を生成するのに必要なライブラリ
:dep evcxr_input                // Jupyter Notebook上で標準入力を使用するのに必要なライブラリ

the bookと違う点②

違う点の2つ目は「値の入力方法」です。本来の標準入力はstd::ioライブラリを使いますが、変則的にJupyter Notebookを使用しているため入力欄が現れません。そこで代替としてevcxr_inputを用います。
let mut guess = evcxr_input::get_string("数字を予想し入力してください");

the bookと違う点③

違う点の3つ目は1秒の待機が2回あることです。下記のコードが該当箇所です。挿入した理由はprintln!での標準出力前に次の入力が始まってしまうためです。
thread::sleep(time::Duration::from_millis(1000));

まとめ

この通りあえてJupyter Notebookでthe bookを学習する場合は自分でevcxrのドキュメントを確認しながら進めていく必要があリマス。。Rustを勉強する目的であればただの遠回りですが、自身でドキュメントを読み解きながら進めていくことも一つ勉強となりますので、ぜひ試してみてください。次回the bookの3章を進めていきます。

Discussion

コメントにはログインが必要です。