持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第12天,点击查看活动详情
函数的定义
-
Dart 是一种面向对象的语言,所以即使函数也是对象,类型就是
Function -
函数的定义方式:
返回值 函数的名称(参数列表) { 函数体 return 返回值 }int sum(int num1, int num2) { return num1 + num2; } var value = sum(2, 3); -
如果函数中只有一个表达式, 那么可以使用箭头语法,也称箭头函数
num sum(num num1, num num2) => num1 + num2; var value = sum(2, 3);
函数的参数
函数重载:方法名字相同,但是参数不同
在 Dart 中,不支持函数重载
必选参数
方法的参数必须传
void sayHI(String name) {
print(name);
}
void main(List<String> args) {
sayHI("dart");
}
log:
dart
可选参数
可选参数分为位置可选参数和命名可选参数
-
位置可选参数
参数形式为
[param1, param2, ...]。函数调用时,参数的类型和位置要一一对应void sayHI1(String name, [int? age, double? height]) { print("name:$name, age:$age, height:$height"); } void main(List<String> args) { sayHI1("dart", 18, 180.0); sayHI1("dart", 18); } log: name:dart, age:18, height:180.0 name:dart, age:18, height:null -
命名可选参数
参数形式为
{param1, param2, ...}。函数调用时,必须把外部形参写上,但是顺序不需要一一对应void sayHI2(String name, {int? age, double? height}) { print("name:$name, age:$age, height:$height"); } void main(List<String> args) { sayHI2("dart", age: 18, height: 180.0); sayHI2("dart", height: 180.0, age: 18); sayHI2("dart", age: 18); } log: name:dart, age:18, height:180.0 name:dart, age:18, height:180.0 name:dart, age:18, height:null -
可选参数中可以设置参数默认值,在不传的情况下,使用默认值,必传参数不能有默认值
void sayHI3(String name, {int age = 12, double? height}) { print("name:$name, age:$age, height:$height"); } void main(List<String> args) { sayHI3("dart"); sayHI3("dart", height: 180.0); sayHI3("dart", age: 18, height: 180.0); } log: name:dart, age:12, height:null name:dart, age:12, height:180.0 name:dart, age:18, height:180.0 -
可选参数中可以指定某个参数是必传的(使用
@required)void sayHI4(String name, {int age = 12, required double? height}) { print("name:$name, age:$age, height:$height"); } void main(List<String> args) { sayHI4("dart", height: 180.0); sayHI4("dart", age: 18, height: 180.0); } log: name:dart, age:12, height:180.0 name:dart, age:18, height:180.0
函数是一等公民
-
函数是一等公民
在面向对象的语言中,类(对象)是一等公民,因为类或对象可以作为参数、返回值,各种传递。在 Dart 中,函数就是一等公民,有如下功能:
- 将一个函数赋值给一个变量
- 将函数作为另一个函数的参数
- 将函数作为另一个函数的返回值
将一个函数赋值给一个变量
void doSomething(Function fun) {
fun();
}
void main(List<String> args) {
var fun = sayHI;
fun();
}
log:
sayHI
将函数作为另一个函数的参数
-
不带参数和返回值
void sayHI() { print("sayHI"); } void doSomething(Function fun) { fun(); } void main(List<String> args) { doSomething(sayHI); } log: sayHI -
带参数和返回值
String sayHI(String name) { return name; } void doSomething(Function fun) { var result = fun("dart"); print(result); } void main(List<String> args) { doSomething(sayHI); }
将函数作为另一个函数的返回值
void sayHI() {
print("sayHI");
}
Function getFun() {
return sayHI;
}
void main(List<String> args) {
var fun = getFun();
fun();
}
log:
sayHI