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

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.

主站蜘蛛池模板: 莎车县| 武汉市| 德惠市| 阳曲县| 澜沧| 禹城市| 江川县| 镇江市| 图木舒克市| 十堰市| 合水县| 新沂市| 色达县| 额敏县| 兴化市| 沙洋县| 拜城县| 乌拉特前旗| 西城区| 启东市| 衡山县| 南雄市| 天峻县| 浑源县| 昌吉市| 江川县| 东平县| 白城市| 庐江县| 蓬安县| 禹州市| 邹平县| 化隆| 化州市| 肃宁县| 连平县| 崇文区| 焦作市| 泽库县| 泌阳县| 衡水市|