Over a million developers have joined DZone.
{{announcement.body}}
{{announcement.title}}

Scala: Setting a default value

DZone's Guide to

Scala: Setting a default value

· Java Zone
Free Resource

Download Microservices for Java Developers: A hands-on introduction to frameworks and containers. Brought to you in partnership with Red Hat.

We wanted to try and generate a build label to use for the name of the artifacts archive that gets generated each time we run the build but wanted to default it to a hard coded value if the system property representing the build label wasn’t available.

In Ruby we would be able to do something like this:

buildLabel =  ENV["GO_PIPELINE_LABEL"] || "LOCAL"

There isn’t a function in Scala that does that so we initially ended up with this:

  def buildLabel() = [{ 
System.getenv("GO_PIPELINE_LABEL") match {
case null => "LOCAL"
case label => label
}
}

My colleague Mushtaq suggested passing the initial value into an Option like so…

def buildLabel() = {
Option(System.getenv("GO_PIPELINE_LABEL")).getOrElse("LOCAL")
}

…which I think is pretty neat!

I tried to see what the definition of an operator to do it the Ruby way would look like and ended up with the following:

class RichAny[A](value:A ) {                              
def || (default:A ) = { Option(value).getOrElse(default) }
}
implicit def any2RichAny[A <: AnyRef](x: A) = new RichAny(x)

Which we can use like so:

def buildLabel() = {
System.getenv("GO_PIPELINE_LABEL") || "LABEL"
}

I imagine that’s probably not the idiomatic Scala way to do it so I’d be curious to know what is.

From http://www.markhneedham.com/blog/2011/06/12/scala-setting-a-default-value/

Download Building Reactive Microservices in Java: Asynchronous and Event-Based Application Design. Brought to you in partnership with Red Hat

Topics:

Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}