Dart 语言学习 05
Author : ScorpioDong
1. 函数
函数是可读,可维护和可重用代码的构建块。函数是一组用于执行特定任务的语句。函数将程序组织成逻辑代码块。一旦定义,可以调用函数来访问代码。这使得代码可以重用。此外,函数可以轻松读取和维护程序的代码。
1.1 函数定义
定义函数的标准语法如下:
返回值类型 函数名(形参列表) {
函数体和返回值
}
- 返回值类型可以省略,Dart会自动推测返回值类型。
- 形参列表可以为空,表示不接受参数传入。
- 函数体中可以没有返回值,这样就是无返回值函数,返回值类型为void类型。
test() {
print("Hello Dart");
}
特别的,如果函数体只有一条语句,可以使用=>
简写写法,也称Lambda函数或者箭头函数,如:
void test1() => print("Hello");
int test2() => 2 + 3;
其等效于:
void test1() {
print("Hello");
}
int test2() {
return 2 + 3;
}
1.2 可选参数
可选参数是Dart语言的一个特征,其分为命名可选参数,位置可选参数。
1.2.1 命名可选参数
调用函数时可以指定命名参数参数名:值
,定义函数时,使用{参数名1,参数名2}
来指定命名参数:
void test({int a, int b}) {...}
main() {
test(b:3, a:5);
}
- 命名可选参数可以在函数调用时指定参数名传参,而不需严格按照参数列表顺序传参。
1.2.2 位置可选参数
将形式参数使用[]
包裹来标记参数为位置可选参数:
void test(String a, [int b]) {
var result = "$a is String";
if (b != null) {
result = "$result, $b is int";
}
print(result);
}
main() {
test("abc");
test("abc", 23);
}
调用结果:
abc is String
abc is String, 23 is int
- 标记为位置可选参数的函数在调用时可以不传入位置可选参数。
- 在定义函数时,一定要处理好可选参数的使用。
1.2.2 可选参数默认值
- 在定义方法的时候,可以使用
=
来定义可选参数的默认值。 - 默认值只能是编译时常量。
- 如果没有提供默认值,则默认值为
null
。
void test({bool bold = false, bool hidden = false}) {...}
main() {
test(bold: true);
}
1.3 main函数
- 每个应用程序都必须具有顶级main()函数,该函数用作应用程序的入口点。
- main函数的返回值为void。
- main函数具有一个可选参数
List<String> args
。
2. 异常
异常(或异常事件)是在执行程序期间出现的问题。发生异常时,程序的正常流程中断,程序/应用程序异常终止。
Dart中的每个异常都是预定义类Exception的子类,必须处理异常以防止应用程序突然终止。
Dart 提供了 Exception 和 Error 类型, 以及一些子类型。 当然也可以定义自己的异常类型。
2.1 捕获异常
可以使用try/on/catch块处理异常:
try{
可能发生异常的代码
} on 异常名 {
捕获该异常
} catch (异常对象) {
捕获其他所有异常
} finally {
最终执行
}
- 通过指定多个 catch 语句,可以处理可能抛出多种类型异常的代码。
- 与抛出异常类型匹配的第一个 catch 语句处理异常。
- 如果 catch 语句未指定类型, 则该语句可以处理任何类型的抛出对象。
- 不管是否抛出异常, finally 中的代码都会被执行。
2.2 抛出异常
Dart语言使用throw
关键字抛出异常。
不只是异常,throw可以抛出任意的对象…
void test() => throw new FormatException();
void test2() => throw "Hello I'm Exception";
2.3 自定义异常
Dart中的每个异常类型都是内置类Exception的子类。Dart可以通过扩展现有异常来创建自定义异常。
class MyException implements Exception {
// 自定义构造方法、成员变量和成员方法。
}