dart03 运算符

运算符

1 算数运算符

1.1 普通运算符

  • + 加 求和 assert(2+3==5)
  • - 减 求差 assert(2-3=-1)
  • -expr 取反,或称否定(反向表达式)assert(2-3==-1)
  • * 乘积 assert(2*3==6)
  • / 除法 结果为双浮点型 assert(5/2==2.5)
  • ~/ 除法,返回整数结果assert(5~/2==2)
  • % 获取整数除法的余数(取模)assert(5 % 2 == 1);

1.2 前缀后缀运算符

  • 先声明两个变量

    • var a, b;
      
  • ++var var=var+1 (表达式值为var + 1)

    • 先自增在用

    • a = 0;
      b = ++a; // a自加后赋值给b。
      assert(a == b); // 1 == 1
      
  • var++ var=var+1(表达式值为 var)

    • 先用后自增

    • a = 0;
      b = a++; // a先赋值给b后,a自加。
      assert(a != b); // 1 != 0
      
  • --var var=var-1(表达式值为var-1)

    • 先自减在用

    • a = 0;
      b = --a; // a自减后赋值给b。
      assert(a == b); // -1 == -1
      
  • var-- var=var-1 (表达式值为*var*)

    • 先用后自减

    • a = 0;
      b = a--; // a先赋值给b后,a自减。
      assert(a != b); // -1 != 0
      

2 关系运算符

  • == 相等 assert(2==2)
    • 判断两个对象是否表示相同事物 极少数情况下在极少数情况下, 要确定两个对象是否完全相同,需要使用 identical() 函数。
      • 如果x和y可以为null都为null时返回rue其中一个为null 另一个不为null返回false
  • != 不等 assert(2!=3)
  • > 大于 assert(3>2)
  • < 小于assert(2<3)
  • >= 大于等于 assert(3>=2)
  • <= 小于等于assert(2<=3)

3 类型判断运算符

  • as 类型转换
  • is 如果对象是指定类型返回true
  • is! 如果对象是指定类型返回false
    • 不是指定类型返回true

4 赋值运算符

  • = 赋值符号 为变量赋值 a=value

  • ??= 只有当被赋值变量为null时才会赋值给变量

    • // 将值赋值给变量a
      a = value;
      // 如果b为空时,将变量赋值给b,否则,b的值保持不变。
      b ??= value;
      
  • =,-=,+=,/=,*=,~/=,%=

  • >>=(位运算右移),<<=(位运算左移),&=(按位与运算),|=(按位或),^=(按位异或)

5 逻辑运算符

  • && 多条件必须全部满足 为true
  • || 多条件满足其中一项即为true
  • !expr expr代表表达式

6 条件表达式

dart有两个运算符有时可以替换if-else 让表达式更简洁

  • ?:,

    • condition ? expr1 : expr2如果条件为 true, 执行 expr1 (并返回它的值): 否则, 执行并返回 expr2 的值。
  • ??

    • expr1 ?? expr2如果 expr1 不是null, 返回 expr1 的值; 否则, 执行并返回 expr2 的值。
  • 示例

    • var a = 1;
      var a1 = 1;
      print(a == a1 ? "=" : "!=");//=
      print(a ?? "10");//1
      

7 按位和移位运算符

  • &按位与

  • | 按位或

  • ^ 按位非

  • ~expr

  • <<左移

  • >> 右移

    • final value = 0x22;
      final bitmask = 0x0f;
      
      assert((value & bitmask) == 0x02); // AND
      assert((value & ~bitmask) == 0x20); // AND NOT
      assert((value | bitmask) == 0x2f); // OR
      assert((value ^ bitmask) == 0x2d); // XOR
      assert((value << 4) == 0x220); // Shift left
      assert((value >> 4) == 0x02); // Shift right
      

8 级联运算符

级联运算符 (..) 可以实现对同一个对像进行一系列的操作。 除了调用函数, 还可以访问同一对象上的字段属性。 这通常可以节省创建临时变量的步骤, 同时编写出更流畅的代码。

class Person {
  String firstName;
  String country;

  void setCountry(String country) {
    this.country = country;
  }

  Person(firstName) {
    this.firstName = firstName;
  }

  String toString() => 'Name:$firstName\nCountry:$country';
}
  /*级联符号 可以连续操作属性*/
  /*当你要对一个单一的对象进行一系列的操作的时候*/
  Person p = new Person('test');
  p
    ..firstName = "bob"
    ..setCountry("China");
  print(p);

其他操作符

  • () 函数调用

    • void main() {
        add();
      }
      void add(){}
      
  • []列表访问指定索引的值 就是数组根据下标返回值

    • var list=[1,2,3];
      print(list[2]);
      
  • . 对象访问属性

    • var per=new Person("name");
      print(per.firstName);
      
  • ?. 左边为空返回空否不为空返回右边的值

    • 类似于.,但是最左边的操作数可以为null;

    • 示例:表达式person?.firstName person对象中选择字段firstName,

      • person若为nullperson?.firstName值为null
      • ,person不为null则返回person.firstName字段firstName的值
    • var person=new Person("firstName");
      Person ps1;
      print(ps?.firstName);
      print(ps1?.firstName);
      

你可能感兴趣的:(Dart)