Flutter开发 3.Dart语言基础-全局函数
本章节主要介绍全局函数的类型和使用,不包括类方法。
1.main() 函数
main() 函数
每个 Dart 程序都必须有一个 main() 顶级函数作为程序的入口, main() 函数返回值为 void 并且有一个 List 类型的可选参数。
最简单的无参数main函数如下
void main() {
print('Hello, World!');
}
void main(List<String> arguments) {
print(arguments);
}
如果你的vscode使用了CodeRunner,运行出错找不到dart的情况下:
/bin/sh: dart: command not found
请参考 CodeRunner配置Dart
接下来我们需在测试为main函数传递参数,首先我们的测试文件所在的目录,我创建一个测试文件,名字为 main.dart 然后打开launch.json文件,将program配置为main.dart路径,在args中添加main函数的参数。
配置好保存后,切换到main.dart文件,点击顶部运行菜单,以调试(F5)和非调试方式运行都可以。
调试控制台窗口可以看到输出结果。
2.匿名函数(Closure 闭包)
set类型的匿名函数示例:
var s2 = {"ab", "ac", "ad"};
s2.forEach((element) {
print(element);
});
运行后结果如下
ab
ac
ad
map类型的匿名函数示例:
var m2 = {"a": "acrobat", "b": "backup", "c": "class", "d": "description"};
m2.forEach((key, value) {
print(key + ":" + value);
});
运行后结果如下
a:acrobat
b:backup
c:class
d:description
3.函数参数
3.1 一般参数
void main() {
var s1 = {"acrobat", "backup", "class", "description"};
s1.forEach(showElement);
}
void showElement(String element) {
print(element);
}
运行后结果如下
acrobat
backup
class
description
3.2 值传递参数
dart中对于基础数据类型String、int、bool、double是值传递, 虽然他们也是class,但仍然是值传递,不会随函数内的改变而变化。
void func(int ia, String sa, double da) {
print("func: ia=$ia; sa=$sa; da=$da;");
ia = 22;
sa = "22";
da = 22.0;
}
void main() {
int ia = 11;
String sa = "11";
double da = 11.0;
func(ia, sa, da);
print("main: ia=$ia; sa=$sa; da=$da;")
}
运行后结果如下:
flutter: func: ia=11; sa=11; da=11.0;
flutter: main: ia=11; sa=11; da=11.0;
3.3 引用传递参数
List、Set、Map、class是引用传递
void func(List<int> l1) {
print("func:");
l1.forEach((element) => print(element));
l1.add(5);
}
void main() {
List<int> l1 = [1, 2, 3];
func(l1);
print("main:");
l1.forEach((element) => print(element));
}
运行一下输出结果如下:
flutter: func:
flutter: 1
flutter: 2
flutter: 3
flutter: main:
flutter: 1
flutter: 2
flutter: 3
flutter: 5
3.4 可选参数
可选参数的意思就是说,你可以传也可以不传,并不是必须的要的。
void func(int ia, String sa, double da, [int? ib, int? ic]) {
print("func: ia=$ia; sa=$sa; da=$da; ib=$ib; ic=$ic");
ia = 22;
sa = "22";
da = 22.0;
ib = 33;
}
void main() {
int ia = 11, ib = 11;
String sa = "11";
double da = 11.0;
func(ia, sa, da, ib);
print("main: ia=$ia; sa=$sa; da=$da; ib=$ib;");
}
ib和ic就是可选参数,调用处有没有这个实参都可以。
运行输出如下:
flutter: func: ia=11; sa=11; da=11.0; ib=11; ic=null
flutter: main: ia=11; sa=11; da=11.0; ib=11;
3.5 命名参数
定义函数时,使用{param1, param2, …},放在参数列表的最后面,用于指定命名参数。
命名参数也是可选的,调用时也可以省略某个参数.
void func(int id, {String? name, int? age, String remark = "无"}) {
print("func: id=$id; name=$name; age=$age; remark=$remark");
}
void main() {
func(
19,
age: 29,
name: "爪爪",
);
}
运行一下,看一下效果:
flutter: func: id=19; name=爪爪; age=29; remark=无