Dart函数/方法
内置函数
- print()
自定义函数
方法名建议驼峰命名
dart
返回类型 方法名称(参数1,参数2,...){
方法体
return 返回值;
}
dart
void welcomeRH() {
print('欢迎来到隆海文档');
}
List getList() {
return [1, 2, 'r', '隆'];
}
void main() {
welcomeRH();
print(getList());
}
函数嵌套
dart
List getList() {
getStr() {
print('我是一个获取字符串的方法');
}
getStr();
return [1, 2, 'r', '隆'];
}
void main() {
print(getList());
}
方法值参
dart
String callMe(String name, int age) {
return "我的名字叫${name},今年${age}岁";
}
void main() {
var str = callMe('隆海', 23);
print(str);
}
可选参数
在 Dart 2.12 及更高版本中,启用了空安全特性。默认情况下,所有变量都是非空的,除非显式声明为可以为空
[int age]
的可选参数 age
没有被显式声明为可以为空。你需要将 age
声明为可空类型 int?
dart
String callMe(String name, [int? age]) {
if (age != null) {
return "我的名字叫${name},今年${age}岁";
} else {
return "我的名字叫${name},年龄保密";
}
}
void main() {
var str = callMe('隆海');
print(str);
}
默认参数
dart
String callMe(String name, [int? age, sex = '男']) {
if (age != null) {
return "我的名字叫${name},今年${age}岁,性别${sex}";
} else {
return "我的名字叫${name},年龄保密,性别${sex}";
}
}
void main() {
var str = callMe('隆海');
print(str);
}
命名参数
dart
String callMe(String name, {int? age, sex = '男'}) {
if (age != null) {
return "我的名字叫${name},今年${age}岁,性别${sex}";
} else {
return "我的名字叫${name},年龄保密,性别${sex}";
}
}
void main() {
var str = callMe('隆海', sex: '女');
print(str);
}
方法嵌套
dart
void main() {
fn1() {
print('执行了fn1方法');
}
fn2(fn) {
fn1();
}
fn2(fn1);
}
匿名函数
dart
void main() {
var pnum = () {
print('我是匿名方法');
};
pnum();
}
箭头函数
箭头函数只能有一行代码,多行报错
dart
void main() {
List ls1 = ['苹果', '香蕉', '李子'];
ls1.forEach((value) => {print(value)});
}
自执行函数
dart
void main() {
(() {
print('我是自执行方法');
})();
}
递归函数
dart
void main() {
var sum = 0;
fn(int n) {
sum += n;
if (n == 0) {
return;
}
;
fn(n - 1);
}
fn(100);
print(sum);
}
闭包函数
全局变量特点:全局变量常驻内存、全局变量污染全局
局部变量的特点:下常驻内存会被垃圾机制回收、不会污染全局
要求:
- 常驻内存
- 不污染全局
使用闭包可以实现
dart
void main() {
printNum() {
var num = 123;
return () {
num++;
print(num);
};
}
var b = printNum();
b();
}