Dart2基础(四) - 运算符

15 篇文章 0 订阅

目录

算数运算符

关系运算符

类型测试运算符

位运算符 

逻辑运算符

 赋值运算符

其他的运算符


 Dart2的运算符其实跟Java很像,我们简单梳理一下即可。

  • 算数运算符

算数运算符有:+(加)、-(减)、*(乘)、/(除)、~/(除,但结果返回整数)、-expr(负号)以及%(取余)。

另外,还有一元运算符 ++ 和 --,这个在许多语言中都有,定义也是一样。

下面是一些例子。

 print(1 + 1); // 2
 print(2 - 1); // 1 
 print(2 * 10); // 20
 print(14 / 5); // 2.8
 print(14 ~/ 5); // 2 
 print(-(1 + 1)); // -2
 print(14 % 5); // 4

 var v = 2;
 print(v ++); // 2 var++表达式,先返回值,再进行加1运算
 print(++ v); // 4 ++var表达式,先进行加1运算,再返回值
 print(v--); // 4 var--表达式,先返回值,再进行减1运算
 print(--v); // 2 --var表达式,先进行减1运算,再返回值
  • 关系运算符

关系运算符有:==(等于)、!=(不等于)、>(大于)、<(小于)、>=(大于等于)和<=(小于等于)。

print(1 == 1); // true
print(1 != 1); // false
print(2 > 1); // true
print(2 < 1); // false
print(2 >= 1); // true
print(2 <= 1); // false
// == 和 != 不仅仅可以做数值的比较,也可以做对象的比较
// 而且==和!= 都可以进行运算符的重写,过于重写,本章不做讨论
print(null == null); // true
print(null != null); // false
print("a" == "a"); // true
  • 类型测试运算符

类型测试运算符有:is(判断是否某一类)、is!(判断是否不是某一类)和as(将对象作为某一类运行)。

var testInt = 123;
print(testInt is String); // false
print(testInt is! String); // true
print(testInt is num); // true int是num的子类
print(testInt is int);// true

// as 只能用于子类和父类之间转换使用
print((testInt as num) is num); // true。将testInt作为num运行
print((testInt as double) is double); // 报错。double不是int的子类型
  • 位运算符 

位运算符有:&(按位与)、|(按位或)、^(按位异或)、~(按位取反)、<<(按位左移)和>>(按位右移)。

// 我们直接将官网的实例拿了过来
final value = 0x22;
final bitmask = 0x0f;

print((value & bitmask) == 0x02); // true, AND
print((value & ~bitmask) == 0x20); //true, AND NOT
print((value | bitmask) == 0x2f); //true, OR
print((value ^ bitmask) == 0x2d); //true, XOR
print((value << 4) == 0x220); // true, Shift left
print((value >> 4) == 0x02); // true, Shift right

 

  • 逻辑运算符

逻辑运算符有:&&(与)、||(或)、!(非)。

var a = 12;
print(a > 10 && a < 11); // false
print(a > 10 || a < 11); // true
print(!(a > 10)); // false
  •  赋值运算符

赋值运算符有:=(赋值)。

另外还有与其他的运算符,组合成运算符,比如 +=(加等),a += 1 相当于 a = a+1。

var a = 1;

print(a += 1); // 2
print( a -= 1); // 1
  • 其他的运算符

?? (是否为空)、expr? val1:val2(三元运算符)、..(级联运算符)、.(成员访问)、?.(有条件的成员访问)、()(函数调用)、[](列表索引的值)

var nullVar;
var intVar = 12;

// 如果 nullVar是空,则赋值intVar
nullVar ??= intVar;
print(nullVar); // 12

// 如果intVar大于10则返回a否则返回b
var strVar = intVar > 10 ? "a": "b";
print(strVar); // a

// .. 允许你在同一个对象上连续进行操作
var listVar = [1, 2, 3, 4];
listVar.toSet() // 返回一个set对象
..add(5) // 继续操作上一个set对象
..add(1); // 继续操作上一个set对象
// 相当于
var setVar = listVar.toSet();
setVar.add(5);
setVar.add(1);

// ?. 允许左侧的对象为空
var mapVar;
print(mapVar?.length); // null
print(mapVar.length);  // 报错,mapVar是空
print(setVar?.length); // 5

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值