Rust 覚え書き


## Cragoとは何か
⇒<b>Cragoとは、Rustにおけるビルドシステム兼パッケージ管理システム</b>である。

* cargo new プロジェクト名　⇒　プロジェクトの新規作成
* cargo bulid              ⇒　プロジェクトをビルド
* cargo run                ⇒　プロジェクトの実行（コンパイルと実行）
* cargo check              ⇒　文法チェック
* cargo test               ⇒　プログラムをテスト
* cargo doc                ⇒　ドキュメントの作成
* cargo publish            ⇒　ライブラリーを公開

## プロジェクトの新規作成
~~~
// プロジェクトを作成
$ cargo new exam　

// 作成されたメッセージ
>>>Created binary (application) `exam` package 
~~~
⇒examフォルダ以下
* srcフォルダ
  ↳ main.rc // Rustのプログラムを書くためのファイル
* .gitignore
* Cargo.toml // Rustプロジェクトの基本情報や設定情報を記載（マニフェストファイル）

が作成される。

~~~
$ cat Cargo.toml

[package]
name = "exam"
version = "0.1.0"
edition = "2021"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
~~~
⇒Tomlは設定ファイルを記述するための言語。

参照
[TOMLの仕様書（日本語訳）](https://github.com/toml-lang/toml.io/blob/main/specs/ja/v1.0.0-rc.2.md)

## Rustのクレート（ライブラリー）を使ってみる

使い方の手順
Cargo.tomlへ依存関係を記述
例えば、num-bigintというクレートを使うときは、以下のように記述する。
~~~Toml:Cargo.toml
[package]
name = "exam"
version = "0.1.0"
edition = "2021"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
num-bigint = "0.4" // ここを新しく記述
~~~

~~~Rust:main.rs
// BigIntを使うよという宣言
use num_bigint::BigInt;

fn main() {
    // BigIntのオブジェクトで変数を定義
    let num = BigInt::from(9999);
    println!("{}", num.pow(9999));
}
~~~

~~~
$  cargo run

>>>
 Updating crates.io index
   Compiling autocfg v1.1.0
   Compiling num-traits v0.2.15
   Compiling num-integer v0.1.45
   Compiling num-bigint v0.4.3
   Compiling exam v0.1.0 (C:\Users\reon1\vscode_project\Rust_ex\exam)
    Finished dev [unoptimized + debuginfo] target(s) in 7.54s
     Running `target\debug\exam.exe`
3678978362165515792692625984783565804550254385734776186401856613845616360874750523676165256293320372567032110928366569599432699044419901243683670414060788244958198542680024242555554443351351009201406913420042334263191360440293163925263158121905901809215111676734097618278012767257225075955830464560320325882929419607338700417637982216741626089370630527817919858248244425067882107032040504992133693942984257209267233391108496072474133573230329041350621303555562644061581689489773346475812382861630761542671206427399665195254818870660761299953367109234343296185246620947655303971825992891467766505449702800439539931629360781232287044852497103043500184438484564204069490370009909530341317336334459448625114891862723875368733284186382707049409415586173190187044779587133413954719164091602407423040277644116344823196694780496108829093860394544019077913975064195661487863596355153601977696894647060796078336789818901664700936711780540601588027849120357502804206125775390530395449721795143559185701130989019673973414458162432452044153141771428470077266579671902890598334369757628149907925325804486123759313657431199276911296909988206875045039284204307223007631041398551718017194485506118265217378424353090327768422839936661234797187668662233022432765913802940812930832473399186457600442171772676827615589458775748985986943115616079918481062535783932761746……以下略
~~~
⇒初回実行時は、crates.ioからnum_bigintをダウンロードして、ビルドし、実行を行う。

# useの使い方
~~~
use クレート名::モジュール名
use クレート名::モジュール名1::モジュール名2;
use クレート名::{モジュール名A, モジュール名B};

~~~
# Rustの範囲オブジェクト
「0..10」 ⇒　0から9まで
「0..=10」⇒　0から10まで

# Rustで定数を記述する
定数宣言では、型の指定を省略できない
~~~
const 定数名: 型 = 値;
~~~

# 2次元配列の初期化
~~~
let mut 変数名 = [[初期値; 要素数]; 要素数]
~~~

# match構文
if文が処理を真と偽に分ける処理ならば、match文は複数の値に応じて処理を分けることができる。
~~~
match 条件式 {
    値１ => 値1の時の処理,
    値２ => 値２の時の処理,
    値3　=> 値３の時の処理,
    _ => 上記以外の処理, 
}
~~~