以下に従って、ハンズオン実施。 doc.rust-lang.org
標準入力から1行読み取る
use std::io; fn main() { let mut input = String::new(); io::stdin().read_line(&mut input).expect("Failed to read line"); }
- 変数はデフォルトで不変(immutable)。可変(mutable)にするには、mutをつける
- 関連関数(associated function)は
::
で呼び出す - &は参照(reference)
- Resultは列挙型(enum)で、OkとErrを表す
- expect()メソッドで、エラー時のメッセージを設定できる
乱数の生成
Cargo.toml
[dependencies] rand = "0.8.5"
- クレートは外部ライブラリのようなもの「crate is a collection of Rust source code files」
- Cargo.tomlファイルに記述すると、crates.io: Rust Package Registryから取得する
- "0.8.5"と指定した場合、0.8.5以上、0.9.0未満で最新バージョンを取得する
- 初回ビルド時にCargo.lockファイルが作成され、詳細なバージョン情報が記載される
- 最新バージョンにアップデートする場合は、
cargo update
コマンドを実行する - "0.9.0"以上にアップデートする場合は、Cargo.tomlを修正する
use rand::Rng; fn main(){ //1~100までの乱数を生成 let secret_number = rand::thread_rng().gen_range(1..=100); println!("The secret number is: {}", secret_number); }
文字列の数値型変換と、大小比較
use std::cmp::Ordering; fn main(){ // --snip-- loop { let guess: u32 = match guess.trim().parse() { Ok(num) => num, Err(_) => continue, }; match guess.cmp(&secret_number) { Ordering::Less => println!("Too small!"), Ordering::Greater => println!("Too big!"), Ordering::Equal => { println!("You win!"); break; } } } }
- loopで無限ループを作成する
- continueでloopを継続、breakでloopを抜ける
- parse()メソッドはResult型を返す
- match式で、Ok,Errのハンドリングをする
_
は、すべての値にマッチする- cmp()メソッドは、列挙型のOrderingを返す
- OrderingはLess,Greater,Equalのいずれかの値をとる
- シャドウィング(Shadowing)により、同じ名前の変数を再定義することができる