// Scala gives you optional parameters through two main mechanisms:
// default parameter values and Option[T] types.
// Optional parameters via case class config
// When you have several optional settings, bundle them into a config object
object Main {
case class GreetOptions(
name: Option[String] = None,
shout: Boolean = false
)
def greet(opts: GreetOptions = GreetOptions()): Unit =
val base = opts.name.getOrElse("Guest")
val finalName = if opts.shout then base.toUpperCase else base
println(s"Hello, $finalName")
def main(args: Array[String]): Unit = {
greet()
greet(GreetOptions(name = Some("Dana")))
greet(GreetOptions(name = Some("Anna"), shout = true))
}
}
/*
run:
Hello, Guest
Hello, Dana
Hello, ANNA
*/