Dart(四)—面向对象、类操作、抽象、多态、接口以及mixins特性
Dart(三)—方法定义、箭头函数、函数相互调用、匿名、自执行方法及闭包
Dart(二)—循环表达式、List、Set及Map的常用属性和方法
Dart(一)—变量、常量、基本类型、运算符、条件判断以及类型转换
空安全
Dart和Kotlin一样都是支持空安全,空安全操作符主要有两个:
?可空类型!类型断言
可空类型
在之前我们的介绍中,声明一个变量,如:
String str = "A";
str = null;
这个时候str = null代表会报错,提示A value of type 'Null' can't be assigned to a variable of type 'String', 这个是因为str不是一个可空类型。如果要不报错只需这样声明:
String? str = "A";
方法我们也可以实现可空返回类型:
String? getData(data){
if(data != null){
return "this is server data";
}
return null;
}
!非空类型断言
String? str = "this is Dart";
str=null;
// ! 表示如果str不等于null 会打印str的长度
print(str!.length);
late关键字
late关键字主要用于延迟初始化,在声明对象的时候可以不赋初始值:
class Person {
late String name;
late int age;
void setName(String name, int age) {
this.name = name;
this.age = age;
}
String getName() {
return name;
}
}
required关键词
required关键词是用来允许根据需要标记任何命名参数(函数或类),使得它们不为空。因为可选参数中必须有个required参数或者该参数有个默认值。
在之前我们介绍Dart命名参数的方法时候有这样的一个方法:
String getUserInfo(String username, {int age = 0, String sex = '男'}) {//形参
if (age != 0) {
return "姓名:$username -> 性别:$sex -> 年龄:$age";
}
return "姓名:$username -> 性别:$sex -> 年龄保密";
}
getUserInfo("Max");
print(getUserInfo('张三',sex: '男',age: 20));
后面两个参数是可选的,如果我们使用required关键词修饰age和sex,那我getUserInfo("Max")机会报错,你必须要传:
String getUserInfo(String username, {required int age, required String sex}) {//形参
if (age != 0) {
return "姓名:$username -> 性别:$sex -> 年龄:$age";
}
return "姓名:$username -> 性别:$sex -> 年龄保密";
}
//调用
getUserInfo('张三',sex: '男',age: 20)
required关键词可以在我们类的构造方法里使用,这样可以限定了一些初始化必须的操作:
class Person {
String? name;
int age;
//表示 name 和age 必须传入
Person({this.name,required this.age});
}