immutability gap
One of the cool things about learning Scala is the concept of val. This keyword creates a âfixed valueâ which cannot be modified.
Or so I thoughtâŚ
While working today in a Scala project using a 3rd party Java library, I was bitten by a gotcha which I will demonstrate here:
case class DemoClass(var mutableProp: String, immutableProp: String)
val demo = new DemoClass("watch me go", "watch me stay")
demo.mutableProp = "gone"
demo
// res3: DemoClass = DemoClass("gone", "watch me stay")
demo.immutableProp = "not gonna happen"
// cmd4.sc:1: reassignment to val
// val res4 = demo.immutableProp = "not gonna happen"
//So whatâs happening here?
A val is created (demo) which is an instance of DemoClass.
DemoClass contains a property that is a var, meaning that it is mutable in the Scala world.
So while demo is a âfixed valueâ, we are still able to modify its internal properties.
A heavy-handed example, to be sure. But I think it demonstrates my point that just cause a top-level object is defined as a val doesnât mean it is frozen in stone.
â
special note: today marks my 1 year anniversary as a software developer at Uptake! Iâm so happy and fortunate to be able to work for such a great company, full of totally brilliant people, where I get to learn awesome stuff every day. Cheers to 1 year.