@ledsun blog

無味の味は佳境に入らざればすなわち知れず

RubyのパターンマッチでFizzBuzz

rustでFizzBuzz - @ledsun blog で、rustのパターンマッチングを使ったFizzBuzzを書いたので、rubyでもパターンマッチ*1FizzBuzzが書けそうな気がしてきました。

(1..30).each do
  case _1
  in i if i % 15 == 0
    p 'FizzBuzz'
  in i if i % 5 == 0
    p 'Buzz'
  in i if i % 3 == 0
    p 'Fizz'
  else
    p _1
  end
end

rustだと

fn main() {
    for i in 1..=15 {
        match i {
            i if i % 15 == 0 => println!("fizzbuzz"),
            i if i % 3 == 0 => println!("fizz"),
            i if i % 5 == 0 => println!("buzz"),
            _ => println!("{}", i),
        }
    }
}

でした。大体一緒です。 パターンマッチ(ング)の世界では、パターンに式を書くことがガード(句)と言うようです。

参考

*1:なぜかRubyとrustで呼び方が微妙に違う