提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
本篇是笔者关于Dart中函数知识相关的学习纪录
内置函数,Dart语言本身携带的函数
print('Dart');//Dart语言内置函数
Dart中的自定义函数格式如下
返回类型 方法名称(参数1类型 参数1,参数2类型 参数2,...){
方法体
return 返回值;
}
在Dart中,关于函数返回类型可以省略,但是建议书写上,这也是最大程度上避免使用者出现调用错误
Dart中,有关函数作用域的范围限制同其他语言一致
Dart中可以定义可选参数,使用“[]”符号包围的参数即可选参数:
String printUserInfo(String username, [int age]) {
if (age != null) {
return "姓名:$username---年龄:$age";
}
return "姓名:$username---年龄保密";//姓名:张三---年龄保密
}
print(printUserInfo('张三'));
Dart也可以定义默认参数,默认参数在调用者不传值的情况下有一个默认值,定义方法如下:
String printUserInfo(String username, [String sex = '男', int age]) {
if (age != null) {
return "姓名:$username---性别:$sex--年龄:$age";
}
return "姓名:$username---性别:$sex--年龄保密";
}
print(printUserInfo('张三'));//姓名:张三---性别:男--年龄保密
print(printUserInfo('小李', '女'));//姓名:小李---性别:女--年龄保密
print(printUserInfo('小李', '女', 30));//姓名:小李---性别:女--年龄:30
Dart中有命名参数,所谓命名参数,就是在函数调用时,可以通过指定参数名来进行传参,命名参数在传值时需指定传参的参数名,如果不指定参数名则会报错。
String printUserInfo(String username, {int age, String sex = '男'}) {
if (age != null) {
return "姓名:$username---性别:$sex--年龄:$age";
}
return "姓名:$username---性别:$sex--年龄保密";
}
print(printUserInfo('张三', age: 20, sex: '未知'));//姓名:张三---性别:未知--年龄:20
print(printUserInfo('张三', 20, '未知'));//报错
Dart中也支持函数本身作为参数进行传递,具体如下
fn(callback){
callback();
}
fn((){
print("此方法为一个参数函数");//此方法为一个参数函数
});
Dart中也有箭头函数,但是Dart中的箭头函数同js中不同的是,在Dart中箭头函数有且仅有一行方法体,不管加不加{},都不能有第二行方法体,同时方法体语句结尾也不能加分号。如下以集合遍历作为案例演示箭头函数:
List list = ['苹果', '香蕉', '西瓜'];
list.forEach((value) {
print(value);
});
list.forEach((value) => print(value));//匿名函数不加{},后面不能加;
list.forEach((value) => {print(value)});//增加{},{}中也不能加;
Dart同js一样可以定义自执行函数,定义匿名函数同时调用匿名函数,方法如下
((int n) {
print(n);//12
print('我是自执行方法');//我是自执行方法
})(12);
上面实现的两个效果,定义了自执行函数,同时向自执行函数进行参数传递
在讲解Dart中的函数闭包之前,我们先了解一下函数闭包
函数闭包出现的背景如下
1、全局变量特点: 全局变量常驻内存、全局变量污染全局
2、局部变量的特点: 不常驻内存会被垃圾机制回收、不会污染全局
现在想实现的功能:
1.常驻内存
2.不污染全局
函数闭包的概念如下
闭包:当内部函数被返回到外部并保存时,一定会产生闭包,闭包会产生原来的作用域链不释放,过度的闭包可能会导致内存泄露,或加载过慢。
闭包所具备的功能如下
这时候闭包可以解决这个问题,闭包: 函数嵌套函数, 内部函数会调用外部函数的变量或参数, 变量或参数不会被系统回收(不会释放内存)
闭包写法如下
main() {
fn() {
var a = 123; /*不会污染全局 常驻内存*/
return () {
a++;
print(a);
};
}
var b = fn();
b();//124
b();//125
b();//126
}
以上就是笔者关于Dart中函数的相关学习