当先锋百科网

首页 1 2 3 4 5 6 7

【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 表示当 anull 时,将 b 赋值为默认值。如果 a 不为 null,则将 a 赋值给 b

四则运算和位运算中的二元运算符都有相关的赋值运算符,它们是一种简写形式。

这就是 Dart 中所有运算符的介绍。总的来说,这些运算符与我们的思维相符合,理解起来并没有太大的问题。然而,如何合理地使用这些符号来实现需求,需要在编程的过程中逐渐体会。掌握了字的书写方式只是第一步,要成为一名优秀的程序员,还有很长的路要走。接下来,我们将进入下一个阶段:面向对象编程。