Dart:函数、函数定义、可选参数

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

本篇是笔者关于Dart中函数知识相关的学习纪录

一、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中函数的相关学习

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值