やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

Rustのmatch(制御フロー演算子)

 C/C++にあるswitch文の上位互換みたいなやつ。

成果物

参考

コード

match(enum

fn main() {
    println!("{}", value_in_cents(Coin::Penny));
    println!("{}", value_in_cents(Coin::Nickel));
    println!("{}", value_in_cents(Coin::Dime));
    println!("{}", value_in_cents(Coin::Quarter));
    
}
fn value_in_cents(coin: Coin) -> u32 {
    match coin {
        Coin::Penny => { println!("Lucky penny !!"); 1 },
        Coin::Nickel => 5,
        Coin::Dime => 10,
        Coin::Quarter => 25,
    }
}
enum Coin {
    Penny,
    Nickel,
    Dime,
    Quarter,
}

 enum型の値に応じて分岐。

 他言語でいうswitch文, case文のようなもの。

match(名前付き変数)

fn main() {
    println!("{}", value_in_cents(Coin::Penny));
    println!("{}", value_in_cents(Coin::Nickel));
    println!("{}", value_in_cents(Coin::Dime));
    println!("{}", value_in_cents(Coin::Quarter(UsState::Alabama)));
    println!("{}", value_in_cents(Coin::Quarter(UsState::Alaska)));
}
fn value_in_cents(coin: Coin) -> u32 {
    match coin {
        Coin::Penny => 1,
        Coin::Nickel => 5,
        Coin::Dime => 10,
        Coin::Quarter(state) => { println!("{:?}", state); 25 },
    }
}
#[derive(Debug)]
enum UsState {
    Alabama,
    Alaska,
}
enum Coin {
    Penny,
    Nickel,
    Dime,
    Quarter(UsState),
}

 match文でのCoin::Quarter(state)におけるstateは、enumCoinQuarter(UsState)定義におけるUsState型の値をとる。

OR|, 範囲(...), 他_

fn main() {
    let value = 3;
    match value {
        0 => println!("zero"),
        1 => println!("one"),
        2 | 3 => println!("two or three"),
        4 ... 9 => println!("four ... nine"),
        _ => (), // 上記以外のときは`_`で示す。`()`は何もしない。
    }
}
  • | で OR演算。2 | 3で2か3のいずれかに一致すればマッチ
  • ...で範囲。4 ... 949の範囲にある値いずれかであればマッチ
  • _でそれ以外。C/C++のswitch文におけるdefault:とおなじ。

対象環境

$ uname -a
Linux raspberrypi 4.19.42-v7+ #1219 SMP Tue May 14 21:20:58 BST 2019 armv7l GNU/Linux

前回まで