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.