方法也是对象,Function
返回值类型、参数类型可省略
箭头语法: = > expr 也就是{return expr} 只适用于一个表达式,方法都有返回值,如果没有指定则默认return null
- 可选参数(可选命名参数,可选位置参数)
//可选命名参数
//用的大括号
//大括号中俩参数是可以不传入的
//传的时候指定参数名对应传入
printPerson(String name, {int age, String gender}){
print("name = $name, age = $age, gender = $gender");
}
//可选位置参数
//用的中括号
//传的时候是按位置传的
printPerson2(String name, [int age, String gender]){
print("name = $name, age = $age, gender = $gender");
}
void main(){
printPerson("zhang");
printPerson("zhang",age:20)
printPerson("zhang",gender:"Male");
printPerson2("zhang");
printPerson2("zhang",20)
printPerson2("zhang",20,"Male");
}
注意的是,普通参数一定在可选参数前面
- 默认参数值(基于可选参数,值只能是编译期常量)
- 方法对象Function
1.可以作为对象赋值给另一个Function变量
void main(){
var func = printHello;//Function func = printHello
func();//调用时候只需要加个括号就可以!
}
void printHello(){
print("Hello");
}
2.可以作为参数传递给其他方法
void main(){
var list2 = ["h","e","l"];
pirnt(listTimes(list2, times));
}
List listTimes(List list, String times(str)){
for(var index = 0; index < list.length; index++){
list[index] = times(list[index]);
}
return list;
}
String times(str){
return str * 3;
}
- 匿名方法 参数列表 + 方法体
(参数1, 参数2, ....){
方法体...
return 返回值
}
1.可以赋值给一个变量,通过变量进行调用
一个极端的例子。
void main(){
var func = (str){
print("Hello --- $str");
};
func(30);
((){
print("Test");
}).();
}
2.可以在其它方法中直接调用或者传递给其他方法
上面那个times例子就可以改成
print(listTimes(list2, (str){return str * 3}));