ScalaKnol: Why returning a value in finally is a bad idea

Table of contents
Reading Time: < 1 minute

For those of us who are coming from an imperative background, we are used to using try catch rather losely. Ok, I am not trying to generalize here but a majority of us do so. When we come to the Scala world, we realise that like other expressions in scala, try-catch-finally would result in a value.

The general practice recommended is that finally should be used when we want something to be executed irrespective of whether it resulted in a value or ended up in a catch condition. A much used scenario is to clean up any resources in finally such as file.close()

Now, in scala since it would yield a value, the recommendation is that you should not change the value which was computed as a part of try or catch in the finally block. What happens if you do it?

To answer look at the following code blocks

Since the code is done in Scala worksheet, you would be able to see the corresponding output as well.

The difference in the output is because Scala tries to keep the result compatible with what we see in Java, which is, if there is an explicit exception or a return specified in finally then the same would override the value computed in the try or catch block. Surprising ! That is the reason it is best avoided to change the values in finally and keep it for ensuring just side effects like releasing resources.

Written by 

Vikas is the CEO and Co-Founder of Knoldus Inc. Knoldus does niche Reactive and Big Data product development on Scala, Spark, and Functional Java. Knoldus has a strong focus on software craftsmanship which ensures high-quality software development. It partners with the best in the industry like Lightbend (Scala Ecosystem), Databricks (Spark Ecosystem), Confluent (Kafka) and Datastax (Cassandra). Vikas has been working in the cutting edge tech industry for 20+ years. He was an ardent fan of Java with multiple high load enterprise systems to boast of till he met Scala. His current passions include utilizing the power of Scala, Akka and Play to make Reactive and Big Data systems for niche startups and enterprises who would like to change the way software is developed. To know more, send a mail to hello@knoldus.com or visit www.knoldus.com