仓颉编程快速上手
上QQ阅读APP看书,第一时间看更新

2.2.2 对可变变量进行赋值

使用关键字let声明的变量是不可变变量,使用关键字var声明的变量是可变变量。

不可变变量指的是初始化后数据不可以发生改变的变量。对于不可变变量,只可以执行一次“存”操作。可变变量指的是初始化数据可以发生改变的变量。对于可变变量,可以执行多次“存”操作。

对于可变变量,可以随时通过赋值表达式来给变量存入新的变量值。在存入新值之后,旧值就会被新值替换。赋值表达式的语法格式如下:

变量名 = 新值

其中,“=”是赋值操作符,其作用是将“=”右边的新值赋给左边的变量。赋值完成后,变量值就被新值替换了。

1.赋值表达式中的新值是字面量

对代码清单2-1进行修改,将可变变量info的值修改为另一个字符串类型的字面量,如代码清单2-3所示。

代码清单2-3 hello_cangjie.cj

01   main() {
02       var info: String = "你好,仓颉!"
03       println(info)  // 输出变量info并换行
04   
05       info = "使用赋值表达式对可变变量进行赋值"  // 修改info
06       println(info)  // 再次输出info
07   }

编译并执行程序,输出结果为:

你好,仓颉!
使用赋值表达式对可变变量进行赋值

如果对已经完成初始化的不可变变量进行赋值,将会引发编译错误。例如,在以上示例程序中,如果在声明info时使用的是关键字let,那么在之后的代码中就不能再对info进行赋值操作。

2.赋值表达式中的新值是表达式

在仓颉中,表达式是一个宽泛的概念,只要能够返回一个值,就可以将其称为表达式(expression)。简单的表达式是由操作数操作符构成的,其中操作符是可选的。操作数是参与操作的数据,例如字面量"你好,仓颉!"、变量info。操作符是一种特殊的符号,通过操作符可以对相应数据类型的操作数进行各种操作,例如“+”“()”。

以下是一些简单表达式的示例:

"你好,仓颉!"      // 1个字符串类型字面量(操作数)构成的表达式
3                 // 1个整数类型字面量(操作数)构成的表达式
x + 1             // 由2个操作数“x”“1”和1个操作符“+”构成的表达式
println(info)     // 操作符“()”表示函数调用
info = "笑口常开"  // 赋值表达式

赋值表达式中的新值可以是各种表达式,示例代码如代码清单2-4所示。

代码清单2-4 write_variables.cj

01   main() {
02       var x = 1
03       println(x)
04   
05       x = x + 1  // 新值是表达式x + 1
06       println(x)
07   
08       x = x * 3  // 新值是表达式x * 3
09       println(x)
10   }

编译并执行程序,输出结果为:

1
2
6

在示例程序中,首先声明了一个初始值为1的可变变量x(第2行代码)。在第5行代码中,使用以下赋值表达式对x进行赋值:

x = x + 1

在执行该行代码时,首先会计算出“=”右边的表达式的值。由于当前x的值为1,因此计算出表达式x + 1的值为2,再将x + 1的值赋给“=”左边的x,这样就将x的值由1修改为2。

同理,在第8行代码中,使用以下赋值表达式再次修改了x的值:

x = x * 3

在执行该行代码时,同样先使用当前x的值计算出表达式x * 3的值为6,再将6赋给x。

3.复合赋值表达式

除了可以使用赋值表达式对可变变量进行赋值,还可以使用复合赋值表达式对可变变量进行赋值。将其他二元操作符,如“+”“-”“*”等,与赋值操作符复合在一起,可以得到复合赋值操作符。对代码清单2-4稍作修改,得到代码清单2-5。

代码清单2-5 write_variables.cj

01   main() {
02       var x = 1
03       println(x)
04   
05       x += 1  // 等效于x = x + 1
06       println(x)
07   
08       x *= 3  // 等效于x = x * 3
09       println(x)
10   }

以上示例程序的输出结果和代码清单2-4的输出结果是完全一致的。

在示例程序中,使用以下2个复合赋值表达式对可变变量x进行赋值:

x += 1
x *= 3

提示

一元操作符只需要1个操作数,例如,-3中的负号“-”是一元操作符。二元操作符需要2个操作数,例如5 * 3中的乘号“*”是二元操作符。

练习

继续修改2.2.1节的练习代码。

1.使用赋值表达式对表示停车位编号、商铺地址编号和空调开头状态的变量重新赋值。

2.使用赋值表达式对表示童鞋价格的变量重新赋值,使童鞋价格在当前价格的基础上减少19.8元。

3.使用复合赋值表达式对表示童鞋价格的变量重新赋值,使童鞋价格为当前价格的9折(90%)。