在 Dart 中,函数是组织和重用代码的基本单元。函数允许你将代码片段封装起来,并给它一个名称,这样就可以在程序的其他部分多次调用这个函数。本章将详细介绍 Dart 中如何声明和使用函数。
函数的基本结构
Dart 中的函数可以分为两类:命名函数和匿名函数。命名函数有明确的名称,而匿名函数则没有名称。首先我们来学习如何声明一个命名函数。
命名函数
命名函数需要指定函数名称、参数列表和返回类型。函数体内的代码用来实现具体的功能。下面是一个简单的示例:
int addNumbers(int a, int b) { return a + b; }
在这个例子中,addNumbers
是函数的名称,int a, int b
是输入参数,int
是返回值的类型。函数体由 {}
包围,其中 return a + b;
表示该函数执行时会计算两个整数的和并返回结果。
可选参数
在某些情况下,你可能希望函数接受可选参数。Dart 支持两种类型的可选参数:位置可选参数和命名可选参数。
位置可选参数
位置可选参数是指在定义函数时可以指定哪些参数为可选的,并且这些参数在调用时可以不提供值。位置可选参数用方括号 [ ]
包裹。
String greet(String name, [String greeting = "Hello"]) { return "$greeting $name"; } void main() { print(greet("Alice")); // 输出: Hello Alice print(greet("Bob", "Hi")); // 输出: Hi Bob }
命名可选参数
命名可选参数允许你在调用函数时明确指出要传递哪个参数的值,这使得函数调用更加清晰易读。命名可选参数也用方括号包裹,但每个参数都必须带有名称。
String greet(String name, {String greeting = "Hello"}) { return "$greeting $name"; } void main() { print(greet("Alice")); // 输出: Hello Alice print(greet("Bob", greeting: "Hi")); // 输出: Hi Bob }
默认参数
默认参数可以在函数定义时为其指定默认值。如果在调用函数时不提供这些参数的值,则使用默认值。
String greet(String name, {String greeting = "Hello"}) { return "$greeting $name"; } void main() { print(greet("Alice")); // 输出: Hello Alice }
返回值
函数可以返回任何类型的值,包括基本数据类型、对象或集合。如果没有显式地使用 return
语句,函数默认返回 null
。
-- -------------------- ---- ------- ------- ----------------- ------ - ------- - -- -------- - ------ ----- ----- - ---- - ------ -------- - - ---- ------ - --------------------- -- --- ----- ------------------------- ------- -- --- ---- --- -
匿名函数
匿名函数是没有名字的函数,它们通常用于作为参数传递给其他函数。匿名函数也可以被赋值给变量,从而可以像命名函数一样被调用。
-- -------------------- ---- ------- ---- -------------------- ------- - --------- - ---- ------ - -------------- - ------------ --------------- --- -
在这个例子中,doSomething
函数接受一个函数作为参数,并在内部调用这个函数。传入的函数是匿名的,因为它没有名称。
回调函数
回调函数是一种常见的编程模式,在 Dart 中经常使用。回调函数是作为参数传递给另一个函数的函数,通常用于处理异步操作的结果。
-- -------------------- ---- ------- ---- ------------------ --------- - -- ------ -------------------------------- --- -- - ------ ---- - ----- ------- -------------- --------------- --- - ---- ------------------ ----- - ----------------- ----- -------- - ---- ------ - ----------------------- -
在这个例子中,fetchData
函数模拟了一个耗时的操作(比如网络请求),并在完成后通过回调函数 callback
将结果传递出去。
总结
本章介绍了 Dart 中函数的基本概念、声明方法以及不同类型参数的使用方式。理解这些基础知识对于编写高效、可维护的 Dart 应用程序至关重要。接下来,我们将继续深入探讨更多高级主题,如高阶函数、闭包等。