Dart 中的函数和闭包

7 篇文章 0 订阅

1. 函数的定义

void printInfo() {
  print('我是一个自定义方法');
}

int getNum() {
  var myNum = 123;
  return myNum;
}

void main() {
  printInfo(); // 我是一个自定义方法
  var n = getNum();
  print(n); // 123
}

2. 方法传参

void main() {
  int sunNum(int n) {
    var sum = 0;
    for (var i = 1; i <= n; i++) {
      sum += i;
    }
    return sum;
  }

  var n1 = sunNum(5);
  var n2 = sunNum(100);
  print(n1); // 15
  print(n2); // 5050
}
void main() {
  String printUserInfo(String username, int age) {
    return "姓名:$username---年龄:$age";
  }

  print(printUserInfo('张三', 20)); // 姓名:张三---年龄:20
}

2.1 定义一个带可选参数的方法

void main() {
  String printUserInfo(String username, [int? age]) {
    if (age != null) {
      return "姓名:$username---年龄:$age";
    }
    return "姓名:$username---年龄保密";
  }

  print(printUserInfo('张三', 20)); // 姓名:张三---年龄:20
  print(printUserInfo('张三')); // 姓名:张三---年龄保密
}

2.2 定义一个带默认参数的方法

void main() {
  String printUserInfo(String username, [String sex = '男', int? age]) {
    if (age != null) {
      return "姓名:$username---性別:$sex---年龄:$age";
    }
    return "姓名:$username---性別:$sex---年龄保密";
  }

  print(printUserInfo('张三')); // 姓名:张三---性別:男---年龄保密
  print(printUserInfo('张三', '女', 20)); // 姓名:张三---性別:女---年龄:20
}

2.3 定义一个带命名参数的方法

void main() {
  String printUserInfo(String username, {int? age, String sex = '男'}) {
    if (age != null) {
      return "姓名:$username---性別:$sex---年龄:$age";
    }
    return "姓名:$username---性別:$sex---年龄保密";
  }

  print(printUserInfo('张三')); // 姓名:张三---性別:男---年龄保密
  print(printUserInfo('张三', age: 20)); // 姓名:张三---性別:男---年龄:20
}

2.4 实现一个把方法当做参数的方法

void main() {
  fn1() {
    print('fn1');
  }

  fn2(fn) {
    fn();
  }

  fn2(fn1); //fn1
}

3. 箭头函数

void main() {
  List myList = ['苹果', '香蕉', '西瓜'];
  myList.forEach((value) {
    print(value);
  });
  // 苹果
  // 香蕉
  // 西瓜
  myList.forEach((value) => print(value));
  // 苹果
  // 香蕉
  // 西瓜
  myList.forEach((value) => {print(value)});
  // 苹果
  // 香蕉
  // 西瓜
}
void main() {
  List myList = [4, 1, 2, 3, 4];
  var newList = myList.map((value) {
    if (value > 2) {
      return value * 2;
    }
    return value;
  });
  print(newList.toList()); // [8, 1, 2, 6, 8]
  var newList_1 = myList.map((value) => value > 2 ? value * 2 : value);
  print(newList_1.toList()); // [8, 1, 2, 6, 8]
}

4. 匿名方法

void main() {
  var printNum = (int n) {
    print(n + 2);
  };
  printNum(12); // 14
}

5. 自执行方法

void main() {
  ((int n) {
    print(n); //12
    print('我是自执行方法');
  })(12);
}

6. 递归函数

void main() {
  var sum = 0;
  fn(int n) {
    sum += n;
    if (n == 0) {
      return;
    }
    fn(n - 1);
  }

  fn(100);
  print(sum); // 5050
}

7. 闭包

void main() {
  fn() {
    var a = 123; // 不会污染全局,常驻内存
    return () {
      a++;
      print(a);
    };
  }

  var b = fn();
  b(); // 124
  b(); // 125
  b(); // 126
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值