在Dart中,函数为 一等公民,可以作为参数对象传递,也可以作为返回值返回。
// 返回值 (可以不写返回值,但建议写)、函数名、参数列表
showMessage(String message) {
//函数体
print(message);
}
void showMessage(String message) {
print(message);
}
void showNewMessage(int age, [String? birthday]) {
if (birthday != null && birthday.isNotEmpty) {
print("birthday$birthday");
} else {
print("age$age");
}
}
// {}命名参数,required 表示该参数是必须的
void showFirstMessage({required String content, int? time}) {
}
上面?(问号)修饰符 是 nullable修饰符,用于修饰参数,表示此参数可传,可不传。
? 操作符:可选参数,如果不为null则执行
//? 操作符:可选参数,如果不为null则执行
String? content;
int size = content?.length ?? 0;
//?? 操作符:表示如果表达式为空值时,提供一个默认值
int size = content?.length ?? 0;
如下面Container的构造函数使用了命名参数
Container({
super.key,
this.alignment,
this.padding,
this.color,
this.decoration,
this.foregroundDecoration,
double? width,
double? height,
BoxConstraints? constraints,
this.margin,
this.transform,
this.transformAlignment,
this.child,
this.clipBehavior = Clip.none,
})
@required : 对命名可选参数添加required关键字,让对应的命名可选参数变成必传参数
MaterialPageRoute({
required this.builder,
super.settings,
this.maintainState = true,
super.fullscreenDialog,
super.allowSnapshotting = true,
super.barrierDismissible = false,
})
箭头函数用于定义单行函数,用 箭头符号(=>) 分隔参数和函数体,并省略了函数体的大括号:
int sum(int a, int b) => a + b;
String append(String title, String content) => "$title&$content";
void testFunction(String title, String content, Function append) {
String result = append(title, title);
print(result);
}
int sum(int a, int b) => a + b;
Function testReturnFunction() {
return sum;
}