Dart 函数
最后修改于 2025 年 6 月 8 日
Dart 函数教程展示了如何在 Dart 中使用函数。
Dart 函数定义
函数是将零个或多个输入参数映射到零个或多个输出参数。
使用函数的好处是
- 减少代码重复
- 提高代码清晰度
- 代码重用
- 将复杂问题分解为更简单的部分
- 信息隐藏
Dart 函数是一等公民。函数可以赋值给变量,作为参数传递给函数,或从函数返回。这使得语言更加灵活。
函数体由函数被调用时执行的语句组成。我们使用 return 关键字从函数返回. 函数体由一对花括号 {} 分隔. 调用函数时,我们指定其名称后跟圆括号 (). 函数可以接受也可以不接受参数。
Dart 函数简单示例
以下示例在 Dart 中创建了一个简单的函数。
void main() {
int x = 4;
int y = 5;
int z = add(x, y);
print("Output: $z");
}
int add(int a, int b) {
return a + b;
}
在本例中,我们定义了一个将两个值相加的函数。
void main() {
main 函数是程序的入口点。
int z = add(x, y);
我们调用 add 函数;它接受两个参数。计算出的值传递给 z 变量。
int add(int a, int b) {
return a + b;
}
add 函数的定义以其返回类型开始。函数参数用逗号分隔;每个参数名称前面都带有其数据类型。函数被调用时执行的语句放在花括号之间。加法运算的结果使用 return 关键字返回给调用者。
print("Output: $z");
print 是一个内置的 Dart 函数,它将给定值打印到控制台。
$ dart main.dart Output: 9
Dart main 函数参数
main 函数可以接受来自命令行的参数。
void main(List<String> args) {
print(args);
print(args.length);
if (args.length > 1) {
var a = args[1];
print(a);
}
}
命令行参数存储在字符串列表 args 中。
$ dart main.dart 1 2 3 4 5 [1, 2, 3, 4, 5] 5 2
Dart 箭头函数
箭头函数允许我们创建一个由单个表达式组成的简化函数。我们可以省略花括号和 return 关键字。
int add(int x, int y) => x + y;
int sub(int x, int y) => x - y;
void main() {
print(add(3, 5));
print(sub(5, 4));
}
在本例中,我们有两个使用箭头语法定义的函数。
$ dart main.dart 8 1
Dart 可选的位置参数
方括号 [] 用于指定可选的位置参数。
void main() {
print(pow(2, 2));
print(pow(2, 3));
print(pow(3));
}
int pow(int x, [int y = 2]) {
int r = 1;
for (int i = 0; i < 2; i++) {
r *= x;
}
return r;
}
我们定义一个求幂函数。第二个参数是可选的;如果未指定,则使用其默认值来计算幂。
$ dart main.dart 4 4 9
Dart 可选的命名参数
可选的命名参数在花括号 {} 内指定。
void main() {
var name = "John Doe";
var occupation = "carpenter";
info(name, occupation: occupation);
}
void info(String name, {String occupation}) {
print("$name is a $occupation");
}
info 函数将其第二个参数作为可选的命名参数。
info(name, occupation: occupation);
在传递可选的命名参数时,我们必须同时指定参数名称和值,并用冒号分隔。
$ dart main.dart John Doe is a carpenter
Dart 匿名函数
我们可以创建匿名函数。匿名函数没有名称。
void main() {
var words = ['sky', 'cloud', 'forest', 'welcome'];
words.forEach((String word) {
print('$word has ${word.length} characters');
});
}
我们创建了一个匿名函数,该函数计算列表中每个单词的字符数。
$ dart main.dart sky has 3 characters cloud has 5 characters forest has 6 characters welcome has 7 characters
Dart 递归函数
递归,在数学和计算机科学中,是一种定义方法的方式,其中被定义的方法在其自身定义中应用。换句话说,递归方法调用自身来完成其任务。递归是解决许多编程任务的广泛使用的方法。
一个典型的例子是计算阶乘。
int fact(int n) {
if (n == 0 || n == 1) {
return 1;
}
return n * fact(n - 1);
}
void main() {
print(fact(7));
print(fact(10));
print(fact(15));
}
在此代码示例中,我们计算了三个数字的阶乘。
return n * fact(n - 1);
在 fact 函数体内部,我们使用修改后的参数调用 fact 函数。该函数调用自身。
$ dart main.dart 5040 3628800 1307674368000
Dart 函数作为参数
Dart 函数可以作为参数传递给其他函数。这种函数称为高阶函数。
int inc(int x) => ++x;
int dec(int x) => --x;
int apply(int x, Function f) {
return f(x);
}
void main() {
int r1 = apply(3, inc);
int r2 = apply(2, dec);
print(r1);
print(r2);
}
在本例中,apply 函数将 inc 和 dec 函数作为参数。
int apply(int x, Function f) {
return f(x);
}
我们指定第二个参数是函数类型。
int r1 = apply(3, inc); int r2 = apply(2, dec);
我们将 inc 和 dec 函数作为参数传递给 apply 函数。
$ dart main.dart 4 1
Dart 嵌套函数
嵌套函数,也称为内部函数,是在另一个函数内部定义的函数。
void main() {
String buildMessage(String name, String occupation) {
return "$name is a $occupation";
}
var name = "John Doe";
var occupation = "gardener";
var msg = buildMessage(name, occupation);
print(msg);
}
我们有一个在 main 函数内部定义的辅助 buildMessage 函数。
$ dart main.dart John Doe is a gardener
Dart 返回函数的函数 (闭包)
Dart 中的函数可以返回另一个函数。这允许您创建从其周围作用域捕获变量的闭包。
Function makeAdder(int addBy) {
return (int x) => x + addBy;
}
void main() {
var add2 = makeAdder(2);
var add5 = makeAdder(5);
print(add2(3)); // 5
print(add5(3)); // 8
}
makeAdder 函数返回一个将特定值添加到其参数的新函数。返回的函数会记住其创建上下文中的 addBy 值。
$ dart main.dart 5 8
Dart 命名参数的默认值
您可以在 Dart 函数中为命名参数提供默认值。这使得参数成为可选的,并在未提供时分配默认值。
void greet(String name, {String greeting = 'Hello'}) {
print('$greeting, $name!');
}
void main() {
greet('Alice');
greet('Bob', greeting: 'Hi');
}
greet 函数有一个名为 greeting 的命名参数,并带有默认值。如果未指定,则使用 'Hello'。
$ dart main.dart Hello, Alice! Hi, Bob!
Dart 函数 typedefs
Typedefs 允许您定义函数签名并将其用作类型,从而提高代码的可读性和类型安全性。
typedef IntOperation = int Function(int, int);
int add(int a, int b) => a + b;
int mul(int a, int b) => a * b;
void printResult(int x, int y, IntOperation op) {
print(op(x, y));
}
void main() {
printResult(3, 4, add);
printResult(3, 4, mul);
}
在这里,IntOperation 是一个接受两个整数并返回一个整数的函数的 typedef。我们使用它来指定 printResult 中 op 参数的类型。
$ dart main.dart 7 12
来源
在本文中,我们学习了如何在 Dart 中使用函数。我们已经了解了如何定义函数、传递参数、使用可选参数以及如何创建高阶函数。函数是 Dart 编程的基本组成部分,能够实现代码重用和模块化设计。
作者
列出 所有 Dart 教程。