Dart语言基础(函数)

Dart是一种面向对象的语言,所以函数也是对象。这意味着函数可以赋值给变量或作为参数传递给其他函数。

函数声明

数据类型 函数的名称(传参) {
  函数体
  return 返回值
}

举个例子:

int sum(a1,a2){
  return a1+a2;
}

Dart函数声明如果没有显式声明返回值类型时会默认当做dynamic处理。如果函数体只有一个表达式,可以使用简写语法

数据类型 函数的名称(传入参数) => 函数体

上面例子可以简写为

sum(a1,a2)=>a1+a2;

函数作为变量

main(List<String> args) {
  myPrint('Hello World');
}
var myPrint = (str){
  print(str);
};

函数作为参数传递

main(List<String> args) {
  test(sum);
}

test(Function func) {
  print(func(1,2));
}

可选参数

可选参数可以分为 命名可选参数位置可选参数

命名可选参数

命名可选参数是通过命名来区分参数,适用大括号限定。

// 命名可选参数
printAddr(String name, {String city, String country}) {
  print('name=$name city=$city country=$country');
}

// printAddr
printAddr('小明'); // name=小明 city=null country=null
printAddr('小明', city: "广州"); // name=小明 city=广州 country=null
printAddr('小明', city: "广州", country: "中国"); // name=小明 city=广州 country=中国
printAddr('小明', country: "中国"); // name=小明 city=null country=中国
位置可选参数

位置可选参数是通过参数位置来区分参数,适用大括号限定,位置可选参数示例:

// 位置可选参数
printAddr(String name, [String city, String country]) {
  print('name=$name city=$city country=$country');
}

// printAddr
printAddr('小明'); // name=小明 city=null country=null
printAddr('小明', "广州"); // name=小明 city=广州 country=null
printAddr('小明', "广州", "中国"); // name=小明 city=广州 country=中国

注意,可选参数可以指定默认值:


// 可选参数,带默认值
printAddr(String name, {String city = "广州", String country = "中国"}) {
  print('name=$name city=$city country=$country');
}

// 调用printAddr函数
printAddr('小明'); // name=小明 city=广州 country=中国

匿名函数

没有名字的函数,我们称为匿名函数。

main(List<String> args) {
  execute(var function) {
    function();
  }
  //1.运行有名字的函数
  myPrint(){
    print("Hello World");
  }
  execute(myPrint);

  //2.运行匿名函数,方法1
   execute(() {
     print("Hello World");
     });

  //3.运行有匿名函数,方法3
  execute(() => print("Hello World"));
}

静态作用域

Dart 是静态作用域语言, 基本上大括号里面定义的变量就只能在大括号里面被访问,和 Java 作用域 类似。

var name = 'global';
main(List<String> args) {
  // var name = 'main';
  void myFunction() {
    // var name = 'foo';
    print(name);
  }
  myFunction();
}

词法闭包

一个 闭包 是一个函数对象,不管该对象在何处被调用, 该对象都可以访问其作用域内 的变量。

/// 返回一个函数对象,用于将 [addBy] 加入到函数的参数种
Function makeAdder(num addBy) {
  return (num i) => addBy + i;
}

main() {
  // 定义一个加2的函数对象
  var add2 = makeAdder(2); 
  //print(add2.runtimeType); // (num) => num

  // 定义一个加4的函数对象
  var add4 = makeAdder(4);

  print(add2(3));  //5
  print(add4(3));  //7
}

返回值

所有的函数都返回一个值。如果没有指定返回值,则 默认把语句 return null; 作为函数的最后一个语句执行。

参考
http://dart.goodev.org/guides/language/language-tour
https://book.flutterchina.club/chapter1/dart.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值