10天学会flutter DAY4 玩转 dart 中的 运算符

assert(‘5/2 = ${5 ~/ 2} r ${5 % 2}’ == ‘5/2 = 2 r 1’);




*   Dart 还支持自增自减操作。



![在这里插入图片描述](https://img-blog.csdnimg.cn/e01c501344be4af1960fecfbbd51551c.png)



> 示例:



int a;

int b;

a = 0;

b = ++a; // Increment a before b gets its value.

assert(a == b); // 1 == 1

a = 0;

b = a++; // Increment a AFTER b gets its value.

assert(a != b); // 1 != 0

a = 0;

b = --a; // Decrement a before b gets its value.

assert(a == b); // -1 == -1

a = 0;

b = a–; // Decrement a AFTER b gets its value.

assert(a != b); // -1 != 0




[]( )2、关系运算符

---------------------------------------------------------------------



*   下表列出了关系运算符及含义:



![在这里插入图片描述](https://img-blog.csdnimg.cn/1d3dc7bfe2ea437fa21e446357da25c0.png)



要判断两个对象 x 和 y 是否表示相同的事物使用 == 即可。(在极少数情况下,可能需要使用 identical() 函数来确定两个对象是否完全相同)。下面是 == 运算符的一些规则:



当 x 和 y 同时为空时返回 true,而只有一个为空时返回 false。



返回对 x 调用 == 方法的结果,参数为 y。(像 == 这样的操作符是对左侧内容进行调用的。详情请查阅 操作符。)



> 下面的代码给出了每一种关系运算符的示例:



assert(2 == 2);

assert(2 != 3);

assert(3 > 2);

assert(2 < 3);

assert(3 >= 3);

assert(2 <= 3);




[]( )3、类型判断运算符

-----------------------------------------------------------------------



`as、is、is!` 运算符是在运行时判断对象类型的运算符。



![在这里插入图片描述](https://img-blog.csdnimg.cn/f3ed26210cce43de96bac65de5920f0f.png)



*   当且仅当 `obj` 实现了 `T` 的接口,`obj is T` 才是 true。例如 obj is Object 总为 true,因为所有类都是 Object 的子类。



> 仅当你确定这个对象是该类型的时候,你才可以使用 as 操作符可以把对象转换为特定的类型。例如:



(employee as Person).firstName = ‘Bob’;




*   如果你不确定这个对象类型是不是 T,请在转型前使用 is T 检查类型。



if (employee is Person) {

// Type check

employee.firstName = ‘Bob’;

}




[]( )4、赋值运算符

---------------------------------------------------------------------



*   可以使用 = 来赋值,同时也可以使用 ??= 来为值为 null 的变量赋值。



// Assign value to a

a = value;

// Assign value to b if b is null; otherwise, b stays the same

b ??= value;




*   像 += 这样的赋值运算符将算数运算符和赋值运算符组合在了一起。



![在这里插入图片描述](https://img-blog.csdnimg.cn/e27cb789a112409b85625c7c287096df.png)



[]( )5、逻辑运算符

---------------------------------------------------------------------



*   使用逻辑运算符你可以反转或组合布尔表达式。



![在这里插入图片描述](https://img-blog.csdnimg.cn/898f0eb93f0f47ada30224f7bbe25e2e.png)



> 下面是使用逻辑表达式的示例:



if (!done && (col == 0 || col == 3)) {

// …Do something…

}




[]( )6、按位和位移运算符

------------------------------------------------------------------------



*   在 Dart 中,二进制位运算符可以操作二进制的某一位,但仅适用于整数。



![在这里插入图片描述](https://img-blog.csdnimg.cn/f416aab91e4a45b4a56a9179790031e4.png)



> 下面是使用按位和移位运算符的示例:



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

assert((value >>> 4) == 0x02); // Unsigned shift right

assert((-value >> 4) == -0x03); // Shift right

assert((-value >>> 4) > 0); // Unsigned shift right




[]( )7、条件表达式

---------------------------------------------------------------------



*   Dart 有两个特殊的运算符可以用来替代 if-else 语句:



**条件 ? 表达式 1 : 表达式 2**



*   如果条件为 true,执行表达式 1并返回执行结果,否则执行表达式 2 并返回执行结果。



**表达式 1 ?? 表达式 2**



*   如果表达式 1 为非 null 则返回其值,否则执行表达式 2 并返回其值。



> 根据布尔表达式确定赋值时,请考虑使用 ? 和 :



var visibility = isPublic ? ‘public’ : ‘private’;




> 如果赋值是根据判定是否为 null 则考虑使用 ??。



String playerName(String? name) => name ?? ‘Guest’;




> 上述示例还可以写成至少下面两种不同的形式,只是不够简洁:



// Slightly longer version uses ?: operator.

String playerName(String? name) => name != null ? name : ‘Guest’;

// Very long version uses if-else statement.

String playerName(String? name) {

if (name != null) {

return name;

} else {

return 'Guest';

}

}




[]( )8、联级运算符

---------------------------------------------------------------------



*   级联运算符 (…, ?..) 可以让你在同一个对象上连续调用多个对象的变量或方法。



> 比如下面的代码:



querySelector(‘#confirm’) // Get an object.

?..text = ‘Confirm’ // Use its members.

…classes.add(‘important’)

…onClick.listen((e) => window.alert(‘Confirmed!’));




> 上面的代码相当于:



var button = querySelector(‘#confirm’);

button?.text = ‘Confirm’;

button?.classes.add(‘important’);

button?.onClick.listen((e) => window.alert(‘Confirmed!’));




> 级联运算符可以嵌套,例如:



final addressBook = (AddressBookBuilder()

  ..name = 'jenny'

  ..email = 'jenny@example.com'

  ..phone = (PhoneNumberBuilder()

        ..number = '415-555-0100'

        ..label = 'home')

      .build())

.build();



[]( )9、其他运算符

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值