flutter基础语法:方法
1. 定义
作为一种面向对象语言,Dart 里方法也是对象,也有类型。Dart 里用Function
表示方法类型,方法类型可以作为参数、返回值等。例如:
Function functionGenerate(Function t) {
return (String s) {
return Function.apply(t, [s]) + s;
};
}
String stringOri(String s) {
return "ori" + s;
}
void main() {
print(functionGenerate(stringOri)("123"));
}
上面代码里,functionGenerate
的入参是一个方法,返回值也是一个方法。其中返回值的方法的参数是String
。代码执行流程如下:
Function.apply(t,[s])
执行stringOri(s)
,返回ori123
。- 执行
+ s
,输出ori123123
。
2. 参数
Dart 里Function
的参数有三种,第一种是 required positional parameters,第二种是 named parameters ,第三种是 optional positional 。例如:
int square(int width, int height) {
return width * height;
}
这里的width
和height
属于 required positional parameters。required positional parameters 后面可以跟 named parameters 或者 optional positional parameters (不能同时)。例如:
int volumn(int length, int width, {int height = 1}) {
return length * width * height;
}
void main() {
print(volumn(4, 5));
print(volumn(4, 5, height: 2));
}
上面例子中,{}
表示 named parameters,named parameters 默认是可选的,当然也可以在参数声明处加上required
,变成必选参数,此时下面代码无法通过编译。
int volumn(int length, int width, {required int height}) {
return length * width * height;
}
void main() {
print(volumn(4, 5)); //无法通过编译
print(volumn(4, 5, height: 2));
}
optional positional parameters 使用[]
标识,例如:
int volumn(int length, int width, [int height = 1]) {
return length * width * height;
}
void main() {
print(volumn(4, 5));
print(volumn(4, 5, 2));
}
如果参数声明时没有使用?
表示参数可为空,根据 null safety 的要求,必须为参数指定默认值。例如上面的int height=1
,下面是更多默认值示例。
void doStuff(
{List<int> list = const [1, 2, 3],
Map<String, String> gifts = const {
'first': 'paper',
'second': 'cotton',
'third': 'leather'
}}) {
print('list: $list');
print('gifts: $gifts');
}
3. main方法
每一个应用必须有一个顶层的 main 方法,它是这个应用的入口。 main 方法的返回值为void
,可选参数是List<String>
。
void main() {
print('Hello, World!');
}
4. 匿名方法
Dart 支持匿名方法,你可以将匿名方法赋值给变量,通过变量使用匿名方法。例如:
void main() {
var anonymous = (String s) => s.toUpperCase();
print(anonymous("hello flutter"));
}