可空和可选的区别
可空: 可以传null、也可以传具体的值、但是必须传
可选,可传、可不传 命名可选参数包裹在{}中,位置可选参数包裹在[]中,通过设置非空默认值、或可空修饰符?来实现
位置参数
// 参数是必传的
bool name(int a, int? b /*哪怕这里的b为可空*/) {
return false;
}
name(10, null);
name(10, 10);
可选位置参数
// a:必传的
// b、c 可选位置参数、设置为可选有两种方式:1添加非空默认值、2设置为可空
bool name(int a, [int b = 10, int? c]) {
return false;
}
name(10)
name(10 20)
name(10, 20, 30)
// Error、这种不加非空默认值,也不加可空修饰符,编译器会直接报错
bool name(int a, [int b, int c]) {}
命名参数
命名参数默认是可选的,除非你声明了required
// 1 添加 required 修饰、改为必传参数
bool name({ required int a }) {
return false;
}
// 2 b、c 可选命名参数、设置为可选有两种方式:1添加非空默认值、2设置为可空
bool name({ required int a, int b = 10, int? c }) {
return false;
}
// Error、这种不加非空默认值,也不加可空修饰符,编译器会直接报错
bool name({int a, int b}) {
return false;
}