1、运算符
1.1 算术运算符
对数学中加、减、乘、除、取余的实现。
Dart中的算术运算符:
示例:
void main() {
print(3 + 5); // 实现3+5,结果为8。
print(3 - 5); // 实现3-5,结果为-2。
print(3 * 5); // 实现3x5,结果为15。
print(3 / 5); // 实现3÷5,结果为0.6,结果类型是double类型。
print(3 ~/ 5); // 实现3÷5,结果为0,取运算结果的整数部分,结果类型为int类型。
// 取模运算结果类型根据运算符两边的类型来定,如出现double类型,结果类型会向double类型转换。
print(3 % 5); // 实现取余,结果为3, 结果类型为int。
print(3.5 % 5); // 实现取余,结果为3.5,结果类型为double。
}
1.2 赋值运算符
由算术运算符+等号组成。
示例:
void main() {
int a = 4;
a += 5;
print(a); // 结果为9。
a -= 5;
print(a); // 结果为4。
a *= 5;
print(a); // 结果为20。
a ~/= 5;
print(a); // 结果为4。整除结果为int类型。
double b = 4; // 将int类型数字隐式转换为double类型。
b /= 5;
print(b); // 结果为0.8,除法结果为double类型。
a %= 3;
print(a); // 结果为1,结果为int类型。
b %= 3;
print(b); // 结果为0.8,结果为double类型。
}
1.3 比较运算符
对数学中大于、大于等于、小于、小于等于、等于、不等于的实现。
示例:
void main(){
int a = 4;
double b = 5;
print(a > b); // 实现数学中4>5.0,结果为false。
print(a >= (b-1)); //实现数学中4≥(5.0-1),结果为true。
print(a < b); // 实现数学中4<5.0,结果为true。
print(a <= b); // 实现数学中4≤5.0,结果为true。
print(a == b); // 实现数学中4=5,结果为false。
print(a != b); // 实现数学中4≠5,结果为true。
}
1.4 逻辑运算符
用于组合多个布尔表达式,返回值为bool类型。
- &&: 全真为真,一假全假。注意:如果左侧表达式为假,则右侧表达式不会进行判断,直接返回结果假。
- ||: 全假为假,一真为真。注意:如果左侧表达式为真,则右侧表达式不会进行判断,直接返回结果真。
- !: 取反。如果表达式结果为真,返回结果为假。
示例:
void main() {
print((3>5) && (3<5)); // false
print((3<5) || (5<3)); // true
print(!(3<5)); // false
}
1.5 自增自减运算符
对变量进行快速加1减1。
- ++i, --i: 先加1(或减1),再使用。
- i++, i--: 先使用,再加1(或减1)。
示例:
void main() {
// 自增
int i = 5;
print(++i); // 先加1后,再使用,结果为6。
print(i); // 6
print(i++); // 先使用,结果为6。
print(i); // 再加1,结果为7。
// 自减
int j = 5;
print(--j); // 先减1后,再使用,结果为4。
print(j); // 4
print(j--); // 先使用,结果为4。
print(j); // 再减1,结果为3。
}
1.6 空感知运算符
Dart中引入一些专门的运算符来处理空值。
- 空合并运算符(??):如果左侧表达式为null,则使用右侧表达式的值。
- 空感知赋值运算符(??=):如果左侧变量为null,则将右侧的值赋值给左侧变量。
- 空感知方法调用(?.):如果左侧表达式为null,则不会调用方法,返回null。
示例:
void main() {
// 空合并运算符
int? a; // int? 定义变量a ,a 为可为空。
print(a); // 输出:null
print(a.runtimeType); // 输出:Null
int b = a ?? 5;
print(b); // 输出:5,运算符左侧为空。
// 空感知赋值运算符
a ??= 10;
print(a); // 输出:10,运算符左侧为空,将运算符右侧值赋值给a。
print(a.runtimeType); // 输出:int
// 空感知方法调用
GetData c = GetData;
print(c.runtimeType); // GetData
feelNull(c); // 传入 GetData,输出:2
GetData? d;
print(d.runtimeType); // 输出:Null
feelNull(d); // 传入null,输出:null
}
void feelNull (GetData? data) {
data?.name;
// 空感知方法调用,如果data为空,则返回null,否则调用getNum() 函数
var result = data?.getNum(1);
print(result);
}
class GetData {
String? name;
int getNum(int i){
return i+1;
}
}
1.7 级联运算符(..)
允许在同一个对象上连续访问属性或调用多个方法的运算符。
示例:
void main() {
// 级联运算符
GetData a = GetData()
..name
..age
..sex
..getNum(1);
}
class GetData {
String? name;
int age = 19;
bool sex = true;
int getNum(int i){
return i+1;
}
}
1.8 类型判断运算符
用于检查对象的类型。
- is
- is!
示例:
void main() {
int a = 10;
print(a is String); // 输出:false
print(a is int); // 输出:true
print(a is! String); // 输出:true
print(a is! int); // 输出:false
}
2、 表达式
可以是一个值、一个变量、一个函数调用,或者是包含运算符的一段代码。
2.1 简单表达式
- 一个值、一个变量
- 示例: 15,true
2.2 复杂表达式
包含运算符、数值、变量、其他表达式。
示例:
void main() {
int a = 12;
int b = 15;
a += 5; // 运算符、数值
print(a); // 17
a += b; // 运算符、变量
print(a); // 32
a += (b+5); // 运算符、数值、变量
print(a); // 52
}
2.3 条件表达式(三目运算符)
用于条件选择执行。
示例:
void main() {
int a = 12;
int b = 15;
bool l = (a>b) ? (a>5) : (b>16);
print(l); // 输出: false
}
2.4 箭头函数
用于简化定义一个函数。
示例:
void main() {
hello(); // 输出:hello,Dart
}
void hello() => print('hello,Dart');
3、总结
运算符与表达式不仅实现了数学计算、比较和逻辑判断,还提供了许多的特殊运算符(空感知运算符、级联运算符等)。