ScalaでFizzBuzz書いてみた。
ifのみで単純にやってみる
def fizzBuzz(num: Int): String = {
if (num % 3 == 0 && num % 5 == 0) {
"FizzBuzz"
} else if (num % 3 == 0) {
"Fizz"
} else if (num % 5 == 0) {
"Buzz"
} else {
num.toString
}
}
単純に書くとFizzBuzzと1つずつのケースを別個の分岐に書かないといけないので若干無駄。
StringBuilder使って分岐を減らしてみる
def fizzBuzz(num: Int): String = {
val sb = new StringBuilder
if (num % 3 == 0){
sb.append("Fizz")
}
if (num % 5 == 0){
sb.append("Buzz")
}
if (sb.isEmpty) num.toString else sb.result
}
同じチェックを何度もしなくていいんで割と綺麗に書けた。
パターンマッチでやってみる
def fizzBuzz(num: Int): String = {
(num % 3, num % 5) match {
case (0, 0) => "FizzBuzz"
case (0, _) => "Fizz"
case (_, 0) => "Buzz"
case _ => num.toString
}
}
パターンマッチが綺麗にかけているような気がするものの直感的ではない。
もう少しワンライナー的な書き方ができないものか。
こちらにも投稿
http://melvins-nest.com/dev/2017/01/08/scalaでfizzbuzz/