rust勉強中のメモ。Tuple
に対してmatch
できる。
以下はサンプルコード。いわゆるFizzBuzz。
FizzBuzz
fn main() {
for n in 1..=30 {
let str_n = n.to_string();
let fb = match (n % 3, n % 5) {
(0, 0) => "FizzBuzz",
(0, _) => "Fizz",
(_, 0) => "Buzz",
_ => &str_n,
};
println!("{}", fb);
}
}
FizzBuzzの出力は次の4通りになる。
- 3で割り切れる、かつ、5で割り切れる - FizzBuzz
- 3で割り切れるが、5では割り切れない - Fizz
- 5で割り切れるが、3では割り切れない - Buzz
- 3でも5でも割り切れない - 該当する数値
3でも5でも割り切れるパターンをmod15==0
で判定してもいいのだけれど、(mod3, mod5)
のタプルをパターンマッチすることで、コードを自然言語に近づける形で表現できました。
データベースのレコードなど、複数の項目に対するパターンマッチなどに使いやすそうで、rustいいですね。