usakdsteen

ゆうさくですてぃーん

ラスト(2)

https://doc.rust-lang.org/stable/book/

rustのbookを読んで思ったこと適当にメモ


https://doc.rust-lang.org/stable/book/guessing-game.html



インポートはuseを使う
use std::io;

preludeというデフォルトのやつが暗黙にインポートされている
println!()とかがたぶんそう



変数はletで定義できる、型推論あるぽさげ、mutつけると中身変更できる、mutない場合はイミュータブル
let foo = 5;
let mut bar = 5;



Stringは標準ライブラリにある文字列型stringを提供する?
Stringはサイズが自動拡張で、UTF-8エンコードで文字列が保持されるぽい
String::new()というスタティックメソッド(みたいな関数)で空文字列を生成できる



標準入力のファイルハンドルの取得はstd::ioのio::stdin()の関数で行う、単にstd::io::Stdinを返すだけらしい

ファイルハンドルのread_line()で1行の文字列を取得できるぽい
引数には変数への書き込み可能の目印で &mut をつけないとダメっぽい
&mutはミュータブルな変数を参照しますよってことらしい

read_line()の戻り値はio::Resultの型(これはジェネリックなResult型をio系で特殊化した型)で
この戻り値に対して処理するコードを書かないとコンパイルエラーになるっぽい
expect()はread_line()に失敗したときにpanic!()マクロを呼び出してくれるResultのメソッドらしい
英和辞書のexpectの意味(意味:期待する)と使いどころの部分(エラーメッセージ)が感覚的によく分からない


Rustにはcrateという色んなパッケージを取り扱うパッケージリポジトリがあるらしい(?)
Crates.ioというサイトにパッケージリストがある(?)


Rustには標準ライブラリに乱数を扱うものが付属しないから
crateから乱数を扱うライブラリのパッケージを取得するらしい

Cargo.tomlの[dependencies]の項目にライブラリ名と必要なバージョンを書く

[dependencies]
rand="0.3.0"

"^0.3.0"と書くと0.3.0と互換性のあるバージョン要求で
"=0.3.0"と書くと0.3.0だけという要求(互換性あるバージョンでもダメ)

$ cargo build
のコマンドで依存関係のパッケージを自動でダウンロードしてくれる

randのライブラリはlibcのライブラリに依存しててそれも取得する

crateの外部ライブラリ参照にはソースコードのトップに
extern crate rand;
のように書く必要がある

また
use rand::Rng;
の宣言も必要(?)
これはrandの関数を使う際に必要なtraitを参照するために宣言する必要があるらしい(?)

rand::thread_rng()は
現行のスレッドに乱数ジェネレータのコピーを返す関数
gen_range()で指定範囲内の乱数を生成する



今日はここまで

次回は↓から読み始める
https://doc.rust-lang.org/stable/book/guessing-game.html#comparing-guesses