周末雨会(一):变数的两种状态 val vs var

台湾的特殊位置,使她在夏秋之间常遭受台风袭击,但偶尔也会有搞错季节的晚台。

诗忆望着窗外灰暗的天空,狂风暴雨丝毫没有停歇之势。

周末其他人都不在,於是唯心提议在寝室补课,两人都没看天气预报,不知道天气会变坏。

唯心冒着风雨提着两份外带小火锅。

门被推开的瞬间,食物的香味就飘满整间寝室,诗忆咽下口水。

「有学姐真好。」她真诚的发出感谢之词。

唯心笑笑,将食物放下,去了一趟洗手间稍微收拾身上被雨淋湿的地方。

她回来寝室时,诗忆已经清理好桌面,也准备好两副不锈钢餐筷。

小火锅很美味,两人在心里感谢店家在台风天依旧营业的勤奋,狼吞虎咽解决了午餐。

图1

唯心今天也是另开一个档案放程序码。「今天我们来玩加法吧,你觉得会印出多少?」

fun main() {
    val x = 1
    val y = 2
    val result = x + y
    print(result)
}

这是个位数加法,一般大学生都可以心算出结果,小学生也可以用手指一个一个数出来。

诗忆自然也很快回答:「是3。」

「没错,你现在试试把result加上1?」唯心把笔电还给诗忆。

诗忆想了想,加上一行程序码。

    result = result + 1

诗忆左看看,右看看刚加上的程序码,又回头看看学姐。

「你是不是觉得很想把两边的result一起拿掉?」唯心一口道破她的想法。「这是国高中方程序求解带来的习惯,在程序码里,等号只有一个的时候,不是数学的相等,而是赋予新价值的动作——令新的result是原本result的值加一。」

诗忆放心了,点击绿色三角形跑程序,结果出现红字错误。「咦?」她又试了几次,还是一样的结果。

图2

「因为result现在是val的状态啊,不能重新赋予价值。错误讯息也是这样说的。」

「那要怎麽改?」听了唯心的话,诗忆沮丧地垂下肩膀。

唯心没有开口回答,但她把游标移动到发生错误的那行程序码,让IDE浮出了提示框。

图3

诗忆照着IDE提示框的建议,把val改成了var

fun main() {
    val x = 1
    val y = 2
    var result = x + y
    result = result + 1
    print(result)
}

图4

程序这次顺利跑出4的结果。

唯心拍拍诗忆的肩膀。「做得好,如果需要重新赋值,就使用var,反之就是val。刻意分成两种赋值待遇,是因为不能重写,就代表始终如一。在程序逻辑上有时会利用到这个特性,比如考卷交出去再拿回来修改就是不合理的。IDE时刻检查程序码的语法和合理性,有错误就会像这样在行下面显示红色锯齿线,不用等你按绿色三角形跑程序才发现问题。」

诗忆点头表示了解。

「对了,有个地方要注意,即使var可以重新赋值,也不是没有限制的唷。」程序码在唯心的改动下再次出现红色锯齿底线。

图5

「是因为刚刚是数字,现在是文字吗?」诗忆猜测。

唯心点头。「是的。在程序中不同型态的变数在记忆体分配的方式不同,强硬的将变数改变型态会发生问题。」


<<:  Day4-基本功时间-好做先做!SampleCode解析

>>:  离职倒数19天:霸道总裁到底是不存在还是我没遇到而已

day29: functors

今天我们要来了解 javascript FP 中的 functors 概念。 他的概念就是类似 OO...

Day8. functional programming in Ruby - Block Part1

这篇文章会用不一样的观点来介绍Ruby and Rails,写过 Javascript 的读者们,相...

[Day8] Git学习笔记 -RE篇(MacOS)

前面两天整理的笔记主要都在建立新的东西 今天就把修改用的指令做整理 1. revert - 重做上个...

day16: function programming 是什麽?

在过去我们写程序常常会遇到以下这种情形 let statusA = 0; const B = ()=...

【Bootstrap】【Vue】不会自己收阖的Navbar

【前言】 本系列为个人前端学习之路的学习笔记,在过往的学习过程中累积了很多笔记,如今想藉着IT邦帮忙...