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

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.

主站蜘蛛池模板: 温州市| 永吉县| 精河县| 怀仁县| 安宁市| 来安县| 油尖旺区| 阜平县| 麻栗坡县| 吉安县| 合川市| 锡林郭勒盟| 东乡| 阳朔县| 疏附县| 齐齐哈尔市| 紫阳县| 五大连池市| 平顶山市| 兴仁县| 若羌县| 大厂| 双鸭山市| 安义县| 隆昌县| 巴林右旗| 潜山县| 翁源县| 潞西市| 德江县| 望谟县| 来安县| 体育| 张掖市| 遵义市| 潍坊市| 闻喜县| 永仁县| 偃师市| 石屏县| 霍邱县|