Flutter学习之Dart函数

简介

Dart 函数的基本语法和 JavaScript 类似,但是不需要输入 function 关键字,这样代码更简练。所有函数都有返回值,没有指定返回值的函数返回 null(返回值类型与参数类型都可以省略)。

代码实例解释

方法定义

返回类型  方法体  (参数1,  参数2, ...){
    方法体...
    return 返回值
}
String getPerson(String name, int age){
  return name + ', ${age}';
}

在上面的方法中,return 后面的写法,还可以换成 return name + ', $age' ,在测试的时候,发现在字符串中使用我们的变量时,${age}$age 是等价的。 ${age} 可以在 "{}"中写表达式,但是后者不行。

方法中的参数类型以及返回值类型可以省略

对于这样子的写法,就和 JS 中的写法很类似了。只是说在 JS 中需要使用 function 关键字,但是在 dart 可以省略掉 function 关键字。

getPerson(name,  age){
  return name + ', ${age}';
}

箭头函数

我们可以将上面的写法再次改进下,我们这里的 箭头函数就是代表着一个返回值

void main(){
 print( getPerson('name', 12) );
}

getPerson(name,  age) => name+ ', $age' ; 

可选参数

可选命名参数:{param1, param2, ...}
可选位置参数: [param1, param2, ...]

可选命名参数

从下面的代码中可以看到怎么使用可命名的参数。在代码上面就可以看到如何使用了。只是我们在传入的时候,需要指定下对应的参数名比如下面的 age。没有传入值的就返回的为 null。

void main(){
  getPerson('王麻子') ;

  getPerson('王麻子', age: 12 );
  
  getPerson('王麻子', gender: "小萝莉" );

  getPerson('王麻子', age: 12, gender: "小萝莉");
}

getPerson(String name, {int age, String gender}){
  print ("name = $name, age = $age, gender = $gender");
}

控制台输出

name = 王麻子, age = null, gender = null
name = 王麻子, age = 12, gender = null
name = 王麻子, age = null, gender = 小萝莉
name = 王麻子, age = 12, gender = 小萝莉

可选位置参数

通过代码可以看到,通过可选位置参数,就是严格根据方法的位置传入参数。和上面一种还是有区别的。

void main(){
  getPerson('王麻子') ;

  getPerson('王麻子', 12 );

  getPerson('王麻子', null,  "小萝莉");
}

getPerson(String name, [int age, String gender]){
  print ("name = $name, age = $age, gender = $gender");
}

控制台输出

name = 王麻子, age = null, gender = null
name = 王麻子, age = 12, gender = null
name = 王麻子, age = null, gender = 小萝莉

默认参数值

默认参数值就是说,我们在方法的参数列表上面使用 “=” 号给入一个常量值,如果没有传入该值的时候,就使用我们给入的常量值。

getPerson(String name, [int age = 20, String gender = "大叔"]){
  print ("name = $name, age = $age, gender = $gender");
}

方法对象

方法可以作为对象赋值给其他变量

在 dart 中方法也是一个对象,可以将他赋值给变量。可以通过 var 或者 Function 来声明。

void main(){

  var func = printMsg;

  Function func1 = printMsg;

  func();
  func1();
}

printMsg(){
  print("object");
}

方法可以作为参数传递给其他方法

这里指的是说,我们可把一个方法当做一个变量传入到另外一个变量中。

void main() {
  List list = [1, 2, 3];
  list.forEach(printElement);
}

printElement(element){
    print(element);
}

闭包

闭包是一个方法(对象),闭包定义在其它方法内部,能够访问外部方法的局部变量,并持有其状态。

void main() {

    // 创建一个函数add1,返回加2
    Function add1 = addNum(2);
    
    // 创建一个函数add2,返回加4
    Function add2 = addNum(4);

    // 2 + 3 = 5
    print(add1(3));
    // 4 + 3 = 7
    print(add2(3));
}

// 返回一个函数对象,功能是返回累加的数字
Function addNum(int addBy){
    return (int i) => addBy + i;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wayfreem

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值