I found myself recently looking at the following code which I wrote when I was getting started with Scala:
def getModelState(modelPrefixedId: String) =
modelStates.get(modelPrefixedId) match {
case Some(modelState) ⇒ modelState
case None ⇒
val modelState = new ModelState(modelPrefixedId)
modelStates += modelPrefixedId → modelState
modelState
}
This is typically logic you would write in Java, and it looks great in some ways: it uses pattern matching, the tuple arrow (→
), etc. But it turns out that Scala collections already provide the getOrElseUpdate
method on mutable maps. The 8 lines above translate simply into:
def getModelState(modelPrefixedId: String) =
modelStates.getOrElseUpdate(modelPrefixedId, new ModelState(modelPrefixedId))
Morality: know your collections!