常见的操作符大家都知道就不多介绍了,主要来看看Java所没有的。
类型判定操作符
as
、 is
、 和 is!
操作符是在运行时判定对象 类型的操作符
操作符 | 解释 |
---|---|
as | 类型转换 |
is | 如果对象是指定的类型返回 True |
is! | 如果对象是指定的类型返回 False |
as
操作符把对象转换为特定的类型,但是如果无法完成转换则会抛出一个异常
is
和Java中的 instanceof
相同
void main(){
var age = 15;
//Age类型:int,属于String:false
print("Age类型:${age.runtimeType},属于String:${age is String}");
//Age类型:int,不属于String:true
print("Age类型:${age.runtimeType},不属于String:${age is! String}");
}
赋值操作符
=
、+=
、\=
、*=
这些不必多说,还有一个 ??=
操作符用来指定 值为 null 的变量的值
String? b ;
b??="scc";
//如果 b 是 null,则 "scc" 赋值给 b
print(b);//scc
b??="Dart";
//如果不是 null,则 b 的值保持不变
print(b);//scc
条件表达式
Dart 有两个特殊的操作符可以用来替代 「if-else」 语句:
-
bool ? a : b
(三元运算符)如果条件
bool
为真,则执行 a,否则执行 b -
a ?? b
如果a不为 null,则返回其值,否则返回b值。
print(age==15?"15岁":"不是15岁");//15岁
print(age>18?"成年了":"未成年");//未成年
var name;
//name的值null,??返回:scc
print("name的值$name,??返回:${name??"scc"}");
name = "dart";
//name的值dart,??返回:dart
print("name的值$name,??返回:${name??"scc"}");
级联操作符
级联操作符 (..
) 可以在「同一个对象上 连续调用多个函数以及访问成员变量」。 使用级联操作符可以避免创建 临时变量, 并且写出来的代码看起来 更加流畅:
void main(){
User user = User();
//姓名:scc ,年龄:15,序号:1
print(user.toString());
user..setName("beter")
..setAge(16)
..setId(2);
//姓名:beter ,年龄:16,序号:2
print(user.toString());
}
class User{
var name = "scc";
var age = 15;
var id = 1;
@override
String toString() {
return "姓名:$name ,年龄:$age,序号:$id";
}
void setName(String name){
this.name = name;
}
void setAge(int age){
this.age = age;
}
void setId(int id){
this.id = id;
}
}
安全操作符
Dart提供了 ?.
操作符。左边的操作对象 如果 为 null 则返回 null
?
允许变量为null
User? user2;
//编译不通过,可能位null
//print(user2.name);
print(user2?.name);//null
user2 = User();
print(user2?.name);//scc
String? a;
//编译不通过,
//print(a.length);
print(a?.length);//null
a = "scczs";
print(a?.length);//5