ばうあーろぐ TOP へ戻る

ScalaでFizzBuzz(Scalaことはじめ)

この記事は書かれてから1年以上が経過しており、最新の情報とは異なる可能性があります

(ことはじめ、って書いておいたらたぶん叩かれることはないだろうと思って・・・)

ScalaでFizzBuzz書いてみる

まだまだScalaは書き慣れないのですが、この前の1/11になごやかScala #8にて

『ScalaでFizzBuzzの例題を、パターンマッチで書いてみるといいよ!』

と聞いたので、がんばって色々書いてみようと思いました。

まず最初に書いたもの

object FizzBuzz {
  def fizzbuzz(n: Int):String = n match {
    case x if x % 15 == 0 => "fizzbuzz"
    case x if x % 3 == 0 => "fizz"
    case x if x % 5 == 0 => "buzz"
    case x => x.toString
  }

  def main(args: Array[String]) = {
    (1 to 100).toList.foreach{ n =>
      println(fizzbuzz(n))
    }
  }
}

うーん、素人目でも分かるように、無駄が多そうですね。

特にmainの中がなんかごちゃごちゃしてる気がするので、ここからもうちょっとすっきりするように書き直してみます。

次に書いてみたもの

object FizzBuzz {
  def fizzbuzz(n: Int):String = n match {
    case x if x % 15 == 0 => "fizzbuzz"
    case x if x % 3 == 0 => "fizz"
    case x if x % 5 == 0 => "buzz"
    case x => x.toString
  }

  def main(args: Array[String]) = {
    (1 to 100).map(fizzbuzz).foreach(println)
  }
}

これでよいのかな?まだまだ慣れないけど、

  1. 1から100のリストを作り、
  2. fizzbuzzに変換して、
  3. それぞれ出力する

っていう流れは main 見るだけでざっと分かるようになっているんじゃないかと思いました。 これって、main見るだけでざっと処理全体が分かる ≒ 概要、アウトラインを意味するように書けば良いのでは?って少し思いました。

まだまだ道のりは長そうです・・・。

この記事は書かれてから1年以上が経過しており、最新の情報とは異なる可能性があります

もし記事内に誤りなどございましたら、 @girigiribauer までご一報いただけると助かります。