方法
方法定义
返回值类型 方法名 (参数1,参数2,......){
方法体...
return 返回值;
}
方法特性
- 方法也是对象,并且有具体类型Function
- 返回值类型、参数类型都可省略
- 箭头语法:=>expr 是{return expr;}缩写,只适用于一个表达式。
- 方法都有返回值。如果没有指定,默认 return null 最后一句执行
void main(){
printPerson("张三",18);
print(personName("李四",20));
}
//
void printPerson(String name,int age){
print("$name+$age");
}
//printPerson()等同于下边
//
printPerson(name,age){
print("$name+$age");
}
//箭头语法
personName(String name,int age) =>"$name+$age";
可选参数
- 可选命名参数:{param1,param2,......}
- 可选位置参数:[param1,param2,......]
- 如果存在具体参数,可选参数声明,必须在参数后面
void printPer(String name,{int age,String gender}){
print("name = $name,aget = $age,gender = $gender");
}
void printPer2(String name,[int age,String gender]){
print("name = $name,aget = $age,gender = $gender");
}
默认参数
- 使用 = 在可选参数指定默认值
- 默认值只能是编译时常量
void printPer(String name,{int age = 30,String gender = "Female"}){
print("name = $name,aget = $age,gender = $gender");
}
方法对象
- 方法可作为对象赋值给其他变量
- 方法可作为参数传递给其他方法
void main(){
var func = printPerson;
func();
}
void printPerson(){
print("张三");
}
//打印 张三
void main(){
var list = ["h","e","l","l","o"];
print(printList(list, printStr));
}
List printList(List list, String f(elment)){
for (var i = 0;i<list.length;i++){
list[i] = f(list[i]);
}
return list;
}
String printStr(str){
return str * 3;//str 复制3次;
}
匿名方法
(参数1,参数2){
方法体...
return 返回值
}
- 可以赋值给变量,通过变量进行调用
- 可在其他方法中直接调用或传递给其他方法
print(printList(list, (str){return str*3;}));//同上,字符串复制3次;
闭包
- 闭包是一个方法(对象)
- 闭包定义在其他方法内部
- 闭包能够访问外部方法内的局部变量,并持有其状态
void main(){
var func = a();
func();
func();
func();
func();
}
a(){
int count =0;
printCount(){
print(count++);
}
return printCount;
}
// 0
// 1
// 2
// 3
网友评论