赋值
- 来源: https://www.freebasic.net/wiki/wikka.php?wakka=ProPgAssignments
- 最后更新: 2019-09-27
赋值通常允许变量在其生命周期和作用域内的不同时间持有不同的值。
单一赋值语句
赋值语句由一个变量(简单变量、带索引的变量,甚至 byref 函数结果)和一个表达式(由变量、常量、运算符和括号构成)组成:
variable = expression
执行赋值语句会对右侧的表达式求值,并将结果赋给左侧的变量。
对于赋值操作,表达式的值必须有明确定义(即它是一个有效的"右值"),并且变量必须表示一个可修改的实体(即它是一个有效的可修改(非常量)"左值")。
要使赋值格式正确,右侧表达式的类型应与左侧变量的类型兼容(换句话说,必须能够将表达式转换为变量的类型)。
一个简单赋值的示例如下:
x = 0
在上述示例中,变量 'x' 必须声明为数字类型。
赋值语句执行后,变量 'x' 的值将为零(根据其类型,可能是整数或浮点值)。
在赋值语句中:
表达式在程序的当前状态下求值。
变量被赋予计算得到的值,替换该变量之前的值。
因为右侧先求值,所以可以通过如下方式对变量进行递增:
x = x + 1
复合赋值语句
算术运算符可用于复合算术和赋值操作。
例如,考虑以下复合加法和赋值的示例:
x += 7
上面的复合算术和赋值语句等价于以下完整形式:
x = x + 7
更一般地,带运算符 op 的复合形式:
x op= y
等价于:
x = x op y
当完整形式合法时,复合语句也合法。这要求操作 'x op y' 本身必须格式正确,且操作结果可赋值给 'x'。
赋值与相等
使用等号 '=' 作为赋值运算符常常受到批评,因为它与作为相等比较的含义相冲突。这既导致初学者在编写代码时产生混淆,也导致有经验的程序员在阅读代码时感到困惑。
初学编程的人有时会将赋值与相等关系运算符混淆,因为 '=' 在数学中表示相等,而在许多语言中用于赋值。但赋值改变变量的值,而相等测试检验两个表达式是否具有相同的值。
在 FreeBASIC 中,单个等号 '=' 通常既用于赋值运算符,也用于相等关系运算符,由上下文决定其含义。
为此(以及为了解决解析器的某些歧义情况),可以使用替代符号 '=>' 代替 '=' 进行赋值(与声明中初始化器中常用的用法相同)。
注意:选择 '=>' 符号是为了避免与 '<='(已作为"小于或等于"运算符)和 ':='(':' 用作语句分隔符)冲突。
语句甚至可以混合使用赋值和相等运算符。
例如:
x = a = b
被解析为:
x = ( a = b )
上面的相等表达式 'a = b' 返回 '-1' or '0',或 'true' or 'false',取决于变量 'a' 和 'b' 的类型,但这些变量的值不会被修改。只有相等表达式的结果被赋值给 'x'。
在上述赋值语句中,在相等表达式周围使用括号有助于突出整体行为。
替代符号 '=>' 也可以使用:
x => a = b
('=>' 不能也用作相等运算符的符号)
示例
说明不同情况的示例:
start GeSHi
Dim As Integer x, y, z
x = 5 '' (or 'x => 5')
Print x '' 5 (assignment expression is a constant)
y = x + 4 '' (or 'y => x + 4')
Print y '' 9 (assignment expression is the sum of a variable and a constant)
y = y + 3 '' (or 'y => y + 3')
Print y '' 12 (value of x is incremented by 3)
z = 3 '' (or 'z => 3')
z *= x '' (or 'z *=> x')
Print z '' 15 (value of z is multiplied by value of x)
If x = y Then '' (value of x is not modified)
Print x
Else
Print x, y '' 5 12
End If
x = y = z '' (or 'x => y = z') (value of y is not modified)
Print x, y, z '' 0 12 15end GeSHi
参见
返回 目录