运算符
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
- 判断两个对象是否表示相同事物 极少数情况下在极少数情况下, 要确定两个对象是否完全相同,需要使用 identical() 函数。
!=
不等assert(2!=3)
>
大于assert(3>2)
<
小于assert(2<3)
>=
大于等于assert(3>=2)
<=
小于等于assert(2<=3)
3 类型判断运算符
as
类型转换is
如果对象是指定类型返回trueis!
如果对象是指定类型返回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);
-