在 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 表达式。例如,你可以使用条件运算符来决定默认值。
// javascriptcn.com 代码示例 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 提供了多种方式来为函数参数设置默认值,从而提高了代码的灵活性和可读性。你可以根据需要选择位置参数或命名参数,并使用各种表达式来确定默认值。理解和正确使用这些特性可以帮助你写出更简洁、更易维护的代码。