官术网_书友最值得收藏!

Immutable

Each one of us has a name. Let's keep this simple—a first and last name. My first name is Atul and my last name is Khot. If someone suddenly called me by the name Prakash, things won't work!

Keeping aside cases such as writers taking a pen name (that is, Plum for PG Wodehouse), commonly each one of us has a standard, official name. We simply don't want parts of it changed to willy nilly. Let's try the following example:

scala> case class FullName(firstName: String, lastName: String)
defined class FullName
scala> val name = FullName("Bertie", "Wooster")
name: FullName = FullName(Bertie,Wooster)

scala> name.firstName = "Mrs. Bertie"
<console>:13: error: reassignment to val
 name.firstName = "Albert"

Scala stopped us changing the code of Woosters!! It just saved Bertie from getting a wife!

In case you need a break and some light relief, Google The Code of the Woosters!

Once a case class instance is created, it is sealed. You can read it, but you cannot change it:

scala> name.firstName
res12: String = Bertie
scala> name.lastName
res13: String = Wooster

You can even look at the signified version of the instance that the compiler writes for you:

scala> name
res14: FullName = FullName(Bertie,Wooster)

And you can destructure it using pattern matching. Immutability just reduces the moving parts and helps us to restore sanity. This is a boon when threads enter the picture.

主站蜘蛛池模板: 兖州市| 海林市| 治多县| 射阳县| 吴堡县| 历史| 胶州市| 永德县| 桐城市| 陆川县| 岫岩| 牙克石市| 班玛县| 四川省| 开鲁县| 长岛县| 乐平市| 莱阳市| 友谊县| 滕州市| 巴东县| 临沧市| 晋宁县| 玛曲县| 东丽区| 黄浦区| 德清县| 琼结县| 东乡族自治县| 台东县| 吐鲁番市| 观塘区| 成安县| 长白| 龙山县| 睢宁县| 启东市| 奇台县| 特克斯县| 宣汉县| 太湖县|