在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;
}