Cargoの利用と数当てゲームのコンソール アプリ

 外部ライブラリ クレートを利用するにはRustのCargoが必要みたいなのでCargoを利用します。

 RustをインストールするとCargoもインストールされます。


 cargo new epub_maker --binというコマンドでCargo.tomlというCargoの設定ファイルとmain.rsが作成されます。(将来的に電子書籍の.epubファイルを作成したいのでepub_makerというディレクトリ名にしましたが、現時点では、まだ、電子書籍作成とは無関係なコードです。)


epub_maker

├── Cargo.toml

└── src

    └── main.rs


 cd epub_makerというコマンドでepub_makerディレクトリ(フォルダ)へ移動します。


 randという乱数を生成してくれる外部ライブラリ クレートの設定をCargo.tomlに追加します。


Cargo.toml

――――――――――――――――――――

[package]

name = "epub_maker"

version = "0.1.0"

edition = "2021"


[dependencies]

rand = "0.3.14"

――――――――――――――――――――


 乱数を利用した数当てゲームのコンソール アプリのソース コードをsrc/main.rsに書きます。


src/main.rs

――――――――――――――――――――

use std::io;

use rand::Rng;

use std::cmp::Ordering;


fn main() {


  println!("1以上10以下の自然数を入力してください。");


  let mut string = String::new();


  io::stdin().read_line(&mut string)

    .expect("入力の読み込みに失敗しました。");


  let number: u32 = string.trim().parse()

    .expect("文字からu32型の数への変換に失敗しました。");


  let random_number = rand::thread_rng().gen_range(1, 11);


  println!("生成された乱数は{}です。", random_number);


  match number.cmp(&random_number) {

    Ordering::Less => println!("乱数より小さかったです。"),

    Ordering::Equal => println!("乱数と等しかったです。"),

    Ordering::Greater => println!("乱数より大きかったです。"),

  }

}

――――――――――――――――――――

 コピペする場合は2文字の全角空白を4文字の半角空白に置換してください。


 cargo buildというコマンドを実行してrandなどの外部ライブラリ クレートをダウンロードしてからsrc/main.rsを最適化しない代わりに速くコンパイルします。

 cargo buildというコマンドは、Linuxの場合はtarget/debug/に実行可能ファイルを、Windowsの場合はtarget/debug/に.exeファイルを作成します。

 また、cargo buildというコマンドは、Cargo.lockなどのファイルを作成します。


epub_maker

├── Cargo.toml

├── Cargo.lock

├── src

│   └── main.rs

└── target

    └──epub_maker(.exe)


 ちなみに、cargo updateというコマンドで外部ライブラリ クレートを最新バージョンに更新できるようです。

 また、cargo build --releaseというコマンドで最適化してコンパイルします。

 cargo build --releaseというコマンドはtarget/release/に実行可能ファイルを作成します。


 cargo runというコマンドで、実行可能ファイルが存在する場合は実行可能ファイルを実行しますし、実行可能ファイルが無い場合はcargo buildコマンドを実行してから実行可能ファイルを実行します。


 例えばlet number = 1;のように再定義できるが変更できない変数を宣言するようです。定数ではありません。例えばconst MAX_NUMBER: u32 = 10;のように定数を宣言するようです。


 例えばlet mut number = 1;のように変更できる変数を宣言するようです。

 mutはmutableの略のようです。

 mutableは可変を意味します。


 例えば&numberは参照渡しのようです。


 String::new()はString型の関連関数newを起動しています。関連関数はJavaのクラス メソッド、スタティック メソッドに相当します。


 println!は関数ではなくマクロだそうです。Rustではマクロのおかげで可変長引数を受け取れるそうです。

  • Twitterで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る