dart运算符
1、算术运算符
算术运算符有6种,分别是加减乘除,取余和取整。
运算符 | 描述 |
---|---|
+ | 加法 |
- | 减法 |
* | 乘法 |
/ | 除法 |
% | 取余 |
~/ | 取整 |
void main() {
// 定义变量
num a = 17, b = 3;
print(a + b); // 加 20
print(a - b); // 减 14
print(a * b); // 乘 51
print(a / b); // 除 5.666666666666667
print(a % b); // 取余 2
print(a ~/ b); // 取整 5
}
2、关系运算符
关系运算符有6种,分别是等于(==
)、不等于(!=
)、大于(>
)、小于(<
)、大于或等于(>=
)、小于或等于(<=
)。返回的是 bool
类型 true
或 false
。
运算符 | 描述 |
---|---|
== | 等于 |
!= | 不等于 |
> | 大于 |
< | 小于 |
>= | 大于或等于 |
<= | 小于或等于 |
void main() {
// 定义变量
num a = 17, b = 3;
print(a == b); // false
print(a != b); // true
print(a > b); // true
print(a < b); // false
print(a >= b); // true
print(a <= b); // false
}
3、逻辑运算符
运算符 | 描述 |
---|---|
! | 逻辑非,取反,如果true,返回false, 反之。 |
&& | 逻辑与,需要同时满足,一个为false,返回false |
|| | 逻辑或,有一个为true,直接返回true |
void main() {
bool a = false;
bool b = true;
print(!a); // true
print(a && b); // false
print(a || b); // true
}
4、赋值运算符
赋值运算符有三种,分别是基础赋值运算符、复合赋值运算符。
运算符 | 描述 |
基础赋值运算符: | |
= | 基础赋值 |
??= | 变量值为null的赋值,相当于js中的默认值 |
复合赋值运算符: | |
+= | a+=b 相当于 a = a + b; |
-= | a-=b 相当于 a = a - b; |
*= | a*=b 相当于 a = a * b; |
/= | a/=b 相当于 a = a / b; |
%= | a+=b 相当于 a = a % b; |
~/= | a-=b 相当于 a = a ~/ b; |
5、条件表达式
条件表达式有四种,分别是if…else
、switch…case…default
、三目运算符
和??运算符
。
前三种和其他语言的类似,我们看一下空判断 ??
: express 1 ?? express2 如果 express 1 为null,那么就使用 第二个;
void main() {
var a;
int b = 1;
int c = a ?? b;
print(c); // 1
}
6、级联运算符
级联运算符 (…, ?..) 可以让你在同一个对象上连续调用多个对象的变量或方法;
class Model {
String hello(String name) {
var value = 'hello $name';
print(value);
return value;
}
void sayHi(String name) {
print("hi $name");
}
void sayGoodbye(String name) {
print('goodbye $name');
}
}
// 针对`Model`类基本的用法是:
var model = Model()
model.hello('world')
model.sayHi('bill')
model.sayGoodbye('bill');
// 但是dart提供了更加简便的打开方式,级联(..)
// 下面的代码等效于上面的传统调用方式。
var model = Model()
..hello('world')
..sayHi('bill')
..sayGoodbye('bill');
- 使用级联让代码更简洁。
- 建议对void方法使用级联(注意丢失返回值的问题)。
7、其他操作符
运算符 | 名字 | 描述 |
---|---|---|
() | 使用方法 | 代表调用某个方法 |
[ ] | 访问List | 访问List中特定位置的元素 |
?[ ] | 判空访问List | 左侧调用者不为空时,访问List中特定位置元素 |
. | 访问成员 | 成员访问符 |
?. | 条件访问成员 | 与上述成员访问符类似,但是左边的操作对象不能为null ,例如:foo?.bar ,如果 foo 为 null 则返回 null ,否则返回 bar |
8、用符号处理空值
1、??
条件运算符
如果左边表达式为 null
, 则使用右边的值。
int a = 1;
int b;
int c = b ?? a; // 如果b不为空,则c=b,否则c=a;
2、赋值空判断 ??=
变量自身为空的判断,如果为空赋值为右边的值,作用类似于 js 中的默认值:
String str = 'Tom';
str ??= 'Jerry'; // 如果变量str为空,则赋值为 Jerry
// 等同于:
if(str == null) { str = 'Jerry'};
3、条件访问 ?.
可以避免因为左边对象可能为 null , 导致的异常,也就是说如果为空那么这条语句将不会被执行。
4、非空断言 !
他往往是应对编译器的而不是编译本身,使用“非空断言”,必须确保这个变量已经预想“非空判断”过了。
class Class1 {
int? val1;
int? val2;
Class1(this.val1, this.val2);
int sum1() {
return val1! + val2!;
}
}