Fizzbuzz fun in Scala: A straightforward implementation
In previous articles of this series, I examined various implementations and meanwhile experimented with others at different levels of abstraction. However, before delving into those, I wanted to present what I believe to be the most straightforward approach, which allows for easy reading and extension.
FizzBuzz.scala and run it like: scala-cli run FizzBuzz.scala.The below example makes use of simple functions:
// Commenting the Scala 3 version / Scala CLI directive:
//> using scala 3.3.1
@main def fizzbuzz(): Unit =
def fizzbuzz(n: Int): List[String] =
// a lazy list's elements or only evaluated when needed
LazyList
// create a lazy list counting infinitely from 1
.from(1)
// map to a tuple where first element will hold the result
.map(i => ("", i))
// implement FizzBuzz the logic using easy to read functions
.map((s, i) => if i % 3 == 0 then (s + "Fizz", i) else (s, i))
.map((s, i) => if i % 5 == 0 then (s + "Buzz", i) else (s, i))
// easy to extend:
// .map((s, i) => if i % 2 == 0 then (s + "Bazz", i) else (s,i))
// convert the tuples to a list of Strings
// empty strings are turned into the index number
.map((s, i) => if s.isBlank then i.toString else s)
// take the request number of elements
// remove this line and the next line will never terminate
.take(n)
// here we turn the lazy list into an eager, evaluated list
.toList
end fizzbuzz
fizzbuzz(20).foreach(fb => print(fb + ","))
end fizzbuzz
Note how much easier it is to extend than if you would these `if-else` statements:
def shout(i: Int): String =
if (i % 15 == 0) "FizzBuzz" else
if (i % 3 == 0) "Fizz" else
if (i % 5 == 0) "Buzz" else
i.toString
About the author
I write about: Software architecture and engineering, Better software better. DDD, Scala and Rust
Comments
Join the discussionNo comments yet. Be the first to comment.
FizzBuzz Fun in Scala
Some fun and exploring of FizzBuzz implementations in functional programming style and Scala 3.