在 Dart 中,你可以为函数参数设置默认值。这种功能可以让你在调用函数时选择性地提供某些参数的值,而其他参数则使用默认值。这有助于简化代码和提高灵活性。
使用默认值
当你定义一个带有默认值的参数时,这个参数可以被省略而不报错。如果调用函数时没有提供这个参数的值,那么将使用该参数的默认值。
int sum(int a, [int b = 0]) {
return a + b;
}
void main() {
print(sum(5)); // 输出: 5
print(sum(5, 10)); // 输出: 15
}在这个例子中,b 是一个可选参数,默认值为 0。因此,如果你不提供 b 的值,它将自动使用 0。
必须位置参数与命名参数
Dart 提供了两种类型的可选参数:位置参数和命名参数。
位置参数
位置参数是通过方括号 [ ] 来声明的,它们可以被省略。如果省略,那么它们会使用默认值。
void greet(String name, [String greeting = "Hello"]) {
print("$greeting $name");
}
void main() {
greet("Alice"); // 输出: Hello Alice
greet("Bob", "Hi"); // 输出: Hi Bob
}命名参数
命名参数是通过大括号 { } 来声明的,并且需要在参数名称前面加上 : 符号来指定默认值。命名参数提供了更好的可读性和灵活性。
void describePerson({String name = "Unknown", int age = 30}) {
print("Name: $name, Age: $age");
}
void main() {
describePerson(); // 输出: Name: Unknown, Age: 30
describePerson(name: "John", age: 25); // 输出: Name: John, Age: 25
}命名参数必须在所有位置参数之后声明。
默认值表达式
默认值不仅可以是常量,也可以是任何有效的 Dart 表达式。例如,你可以使用条件运算符来决定默认值。
// www.javascriptcn.com code example
int calculate(int a, [int b = 10]) {
if (b == 0) {
b = 1; // 防止除以零错误
}
return a ~/ b;
}
void main() {
print(calculate(100)); // 输出: 10
print(calculate(100, 0)); // 输出: 100
}在这个例子中,如果 b 为 0,则将其更改为 1 以避免除以零的错误。
可选参数的限制
虽然默认值可以使你的代码更加灵活,但也有一些限制需要注意:
- 必须位置参数不能跟随命名参数。
- 默认值只能用于可选参数。
- 在同一个参数列表中,必须位置参数和命名参数不能混合使用,除非命名参数在所有位置参数之后。
// 错误示例
void wrongFunction(int a, {int b}, [int c]) {} // 不允许正确的做法是将命名参数放在所有位置参数之后。
总结
Dart 提供了多种方式来为函数参数设置默认值,从而提高了代码的灵活性和可读性。你可以根据需要选择位置参数或命名参数,并使用各种表达式来确定默认值。理解和正确使用这些特性可以帮助你写出更简洁、更易维护的代码。