アウトプットの部屋

エンジニアになるためのアウトプット

Rust③ 数字当てゲーム2

match式

use std::cmp::Ordering;

match guess.cmp(&secret_number) {
        Ordering::Less => println!("Too small!"),  
        Ordering::Greater => println!("Too big!"), 
        Ordering::Equal => println!("You win!"),    
    }

cmpメソッドはguess変数とsecret_number変数を比較し、返ってきたOrderringの列挙子に基づき動作する。

例 guess = 50 secret_number = 30の時、cmpメソッドは Ordering::Greaterを返し、 Ordering::Lessから一行ずつ順番にマッチするものを探し、マッチしたら=>のコードが動作する。

let guess: u32 = match guess.trim().parse() {
    Ok(num) => num,
    Err(_) => continue,
};

u32は32ビットの非負整数。

trimは両端の空白を削除するString型のメソッド。

parseメソッドは文字列から数値に変換できた時、Okを返す。Okの場合、一行目のOk(num)にマッチし、=>のnumを返す。 その値が新しく生成したguessに格納される。

そうでない場合、Err(_)にマッチする。この_は、包括値で、この例では保持している情報がどんなものでもいいから全てのErr値にマッチさせたいと言う意味。coutinueはループ処理の次のステップに移すコード。

loop 繰り返し

loop {
        println!("Please input your guess.");

        // --snip--

        match guess.cmp(&secret_number) {
            Ordering::Less => println!("Too small!"),
            Ordering::Greater => println!("Too big!"),
            Ordering::Equal => { 
                 println!("You win!"),
                 break;
            }
        }

    }

breakでループから抜け出せる。