Dart是一种真正的面向对象语言,所以即使是函数也是对象,并且有一个类型,Function。这意味着函数可以分配给变量或作为参数传递给其他函数。您还可以调用Dart类的实例,就好像它是一个函数一样。
-
方法可作为对象赋值给其他变量
-
方法可作为参数传递给其他方法
void main() {
// 方法作为一个变量
var func_world = printHello;
func_world();
//
Function func_world2 = printHello;
func_world2();
// print 方法作为参数
var list = [1, 2, 3, 4];
list.forEach(print);
//
var list2 = ['h', 'e', 'l', 'l', 'o'];
// 此处的times作为参数传递
print(listTimes(list2, times));
}
void printHello(){
print('this is a world');
}
List listTimes(List list, String times(str)){
List listnew = [];
// times()方法作为参数,在该方法内部调用
for (var i = 0; i < list.length; i++) {
listnew.add(times(list[i]));
}
return listnew;
}
String times(str){
return str * 3;
}
结果:
this is a world
this is a world
1
2
3
4
[hhh, eee, lll, lll, ooo]
返回值类型使得运行高效,但是如果你省略了这些类型,这个函数仍然可以工作:
isNoble(atomicNumber) {
return _nobleGases[atomicNumber] != null;
}
对于只包含一个表达式的函数,可以使用简写语法:
bool isNoble(int atomicNumber) => _nobleGases[atomicNumber] != null;
"=> expr"语法是{ return expr; }的简写,=>符号有时被称为胖箭头语法。在箭头(=>)和分号(;)之间只能出现表达式(而不是语句)。例如,您不能在那里放置if语句,但是您可以使用条件表达式。
匿名方法
上文刚刚提到的方法就是这里说的匿名方法:
定义:
(参数1,参数2,....){
方法体...
return 返回值
}
- 匿名方法 + 省略参数 作为变量调用
void main() {
// 匿名方法,以及省略参数
var func = (){
print('匿名方法,以及省略参数');
};
// 调用
func();
}
- 匿名方法 + 传递参数 作为变量调用
void main() {
// 匿名方法,以及省略参数
var func = (content){
print('匿名方法,参数是${content}');
};
// 调用
func('zhoubin');
}
- 匿名方法作为参数被传递
void main() {
List list33 = ['z','b'];
// 匿名方法,
// (str){
// return str * 6;
// }
// 作为参数被传递
print(listTimes(list33, (str){
return str * 6;
}));
}
//
//
// String :匿名函数的返回值类型
// timesnew:接收的匿名函数的"标识"
// (str):匿名函数的参数
List listTimes(List list, String timesnew(str)){
List listnew = [];
for (var i = 0; i < list.length; i++) {
listnew.add(timesnew(list[i]));
}
return listnew;
}
网友评论