【Dart】005-运算符
一、四则运算
四则运算是最基础的量之间的逻辑处理,包括加、减、乘、除、取商和取余六种运算。四则运算符的左右两侧是变量,运算会生成另一个变量。
以下是对六个四则运算符的使用测试:
void foo1() {
int a = 10;
int b = 3;
print(a + b); // 13
print(a - b); // 7
print(a * b); // 30
print(a / b); // 3.3333333333333335
print(a ~/ b); // 3
print(a % b); // 1
}
需要注意的是,浮点型的运算可能存在精度损失的问题。这是由于浮点型本身的特点所致,在任何编程语言中都无法避免。对于需要高精度计算的情况,比如货币计算,可以使用 decimal 类型或第三方库来处理。
二、条件运算符
条件运算符顾名思义,用于校验条件,与我们常规的思维一致。条件运算符的左右两侧是变量,会生成一个布尔值。
以下是对六个条件运算符的使用测试:
void foo1() {
int a = 5;
int b = 6;
print(a > b); // false
print(a < b); // true
print(a == b); // false
print(a != b); // true
print(a >= b); // false
print(a <= b); // true
}
此外,还有三目运算符的使用,例如下面的 getLarger
方法,返回两个数中较大的值。通过比较两个数的大小来确定返回值。
num getLarger(num a, num b) {
bool result = a > b;
if (result) {
return a;
} else {
return b;
}
}
三目运算符相当于上述代码的简写形式,整个表达式返回一个对象。表达式的结构分为三段,使用 ?
分隔条件和结果。如果条件为真,则返回 :
前面的值;否则返回 :
后面的值。
num getLarger(num a, num b) {
num result = a > b ? a : b;
return result;
}
三、逻辑运算符
逻辑运算符用于处理布尔值,共有三种:与、或和非。&&
和 ||
连接两个布尔值;!
后接一个布尔值。
逻辑运算符的特点如下:
&&
:当左右两个值都为真时,结果为真。类似于 “并且” 的意思。例如,检查年龄是否小于 14 岁并且身高小于 1.4 米。||
:当左右两个值中至少有一个为真时,结果为真。类似于 “或者” 的意思。例如,检查年龄是否小于 14 岁或者身高小于 1.4 米。!
:将布尔值取反。类似于 “不是” 的意思。例如,当条件为不允许时执行某些操作。
void foo3() {
int age = 10;
bool free = age < 12 || check();
}
bool check() {
print("call check");
return true;
}
逻辑运算符具有"断路"的特点。例如,对于 ||
运算符,只要第一个条件为真,后面的条件就不再进行检查。这是因为只要一个条件满足,结果已经确定为真了。类似地,对于 &&
运算符也是一样的,只要第一个值为假,后面的值就不再进行校验。逻辑运算符符合人类的思维方式。
四、位运算符
在计算机中,数据以二进制的形式进行存储。位运算符针对的是二进制位进行计算。在日常开发中,位运算符的使用场景并不是很多,但了解一下也是有必要的。
以 int
类型的整数为例,它在内存中占据 4 字节,每字节(byte)由 8 个二进制数字(bit)表示。例如,65 和 11 在计算机中的二进制表示为:
十进制: 65
二进制: 0000 0000 0000 0000 0000 0000 0100 0001
十进制: 11
二进制: 0000 0000 0000 0000 0000 0000 0000 1011
&
:按位与运算符,将左右两个值的位进行运算,只有对应位上下的数字都为 1 时,结果为 1,其他情况为 0。|
:按位或运算符,将左右两个值的位进行运算,只要对应位上下的数字有一个为 1,结果为 1,其他情况为 0。~
:按位取反运算符,将每个位的数字取反,即遇 0 写 1,遇 1 写 0。^
:按位异或运算符,将左右两个值的位进行运算,只有对应位上下的数字不同时,结果为 1,其他情况为 0。<<
和>>
:位移运算符,左侧是值,右侧是位移的数量。左移表示将二进制数字向左移动指定位数,丢弃高位,低位不足则补 0;右移类似,但方向相反。
五、赋值运算符
赋值运算符的语法非常简单:左侧是变量名,右侧是值,用于为变量赋值。
还有一种简写形式 ??=
,相当于条件赋值。例如,a ??= 20
表示当 a
为 null
时,将 b
赋值为默认值。如果 a
不为 null
,则将 a
赋值给 b
。
四则运算和位运算中的二元运算符都有相关的赋值运算符,它们是一种简写形式。
这就是 Dart 中所有运算符的介绍。总的来说,这些运算符与我们的思维相符合,理解起来并没有太大的问题。然而,如何合理地使用这些符号来实现需求,需要在编程的过程中逐渐体会。掌握了字的书写方式只是第一步,要成为一名优秀的程序员,还有很长的路要走。接下来,我们将进入下一个阶段:面向对象编程。