📅  最后修改于: 2023-12-03 15:14:36.754000             🧑  作者: Mango
Dart是一种面向对象的编程语言,它有许多不同类型的函数,本文将介绍这些函数及其用法。
普通函数是最基本的函数类型,它们定义在类或库之外。它们通常返回一个值或为空。以下是一个简单的例子:
int addNumbers(int a, int b) {
return a + b;
}
在上面的例子中,addNumbers
是一个普通函数,它接受两个整数参数并返回它们的和。
匿名函数是没有名称的函数,它们可以作为参数传递给其他函数。这种函数通常用于回调函数。以下是一个例子:
void processList(List<int> list, Function(int value) func) {
list.forEach((item) => func(item));
}
在上面的例子中,processList
函数接受一个整数列表和一个函数参数。该函数参数是一个匿名函数,它被传递给forEach
方法用于处理列表中的每个元素。
闭包函数是一个函数,它可以捕获其作用域中的变量。这使得它们可以访问并修改这些变量,即使这些变量的作用域已经结束。下面是一个例子:
Function makeAdder(int start) {
return (int addBy) => start + addBy;
}
void main() {
var add5 = makeAdder(5);
print(add5(2)); // 输出7
}
在上面的例子中,makeAdder
函数返回一个匿名函数,该函数可以访问makeAdder
的作用域中的变量start
。这使得返回的函数可以在调用它时使用makeAdder
中的值。
Getter函数是一种特殊的函数,它用来获取一个类的属性值。下面是一个例子:
class Person {
String name;
Person(this.name);
String get greeting => 'Hello, $name.';
}
void main() {
var person = Person('John');
print(person.greeting); // 输出 "Hello, John."
}
在上面的例子中,greeting
是一个getter函数,它返回一个字符串。当调用person.greeting
时,它将返回'Hello, John.'
。
Setter函数与Getter函数类似,但它们用于设置属性值。以下是一个例子:
class Person {
String name;
Person(this.name);
set greeting(String value) => name = value.toUpperCase();
}
void main() {
var person = Person('John');
person.greeting = 'Hello';
print(person.name); // 输出 "HELLO"
}
在上面的例子中,greeting
是一个setter函数,它将传递的值转换为大写字母,并将其设置为name
属性的值。
扩展函数允许向现有类添加新的函数,而无需修改类的代码。以下是一个例子:
extension NumberParsing on String {
int parseInt() => int.parse(this);
}
void main() {
var number = '42';
print(number.parseInt()); // 输出42
}
在上面的例子中,parseInt
是一个扩展函数,它被添加到基本的String类中。这使得我们可以调用字符串的parseInt
方法来获取它的整数值。
以上是Dart不同类型的函数的介绍,它们都可以使用不同的方式完成编程任务。熟悉这些函数,可以使您的代码更加清晰,模块化和可重用。