dart快速入门教程 (5)

5.函数

5.1.函数定义

语法:

返回值类型 函数名(参数类型 参数1, 参数类型 参数2,...) {
  // 函数体
  return ‘返回值’
}

举例:

void main() {
  print(sum(10, 20));
}

num sum(int a, int b) {
  return a + b;
}

参数类型是可以省略的

void main() {
  print(sum(10, 20));
}

sum(a, b) {
  return a + b;
}

如果没有指定返回值,默认返回null

void main() {
  print(sum(10, 20));
}

sum(a, b) {
  print(a + b);
}

支持箭头函数

void main() {
  var fn = (a, b) =>  a + b ;
  print(fn(10, 20));
}

5.2.可选参数

1.可选命名参数

void main() {
  // 通过设置age这样的前缀来和可选参数对应,意味着如果三个参数都传的话 age和gender的位置是可以换的  例如这样:person('小强',gender: '男', age: 18)
  print(person('小强', age: 18));
}

String person(String name, {int age, String gender}) {
  return '${name} - ${age} - ${gender}';
}

2.可选位置参数

位置参数的形参和实参是通过位置来一一对应的

void main() {
  // 注意位置不能调换
  print(person('小强', 18, '男'));
}

String person(String name, [int age, String gender]) {
  return '${name} - ${age} - ${gender}';
}

5.3.参数默认值

void main() {
  // 没有传入gender 使用默认值
  print(person('小强',age: 18));
}

String person(String name , {int age, String gender = '男'}) {
  return '${name} - ${age} - ${gender}';
}

5.4.函数参数

void main() {
  print(printPerson(person));
}

String person(String name , {int age}) {
  return '${name} - ${age}';
}

String printPerson (String fn(String name , {int age})) {

  String name1 = 'xiaoqiang';
  int age = 18;
  return fn(name1, age: 18);
}

5.5.匿名函数

void main() {
  String str1 = printPerson((String name, {int age}){return '${name} - ${age}';});
  print(str1);
}

String person(String name , {int age}) {
  return '${name} - ${age}';
}

String printPerson (String fn(String name , {int age})) {

  String name1 = 'xiaoqiang';
  int age = 18;
  return fn(name1, age: 18);
}
void main() {
  var fn = (String name, int age) {
    return '${name} - ${age}';
  }; 
  print( fn('xiaoqiang', 20));
}
void main() {
  // 匿名函数自执行
  var s = ((String name, int age) {
    return '${name} - ${age}';
  })('xiaoqiang', 30);
  print(s);
}

5.6.闭包

闭包的形式就是函数中套函数,作用是可以通过闭包把函数中的私有变量暴露出去

void main() {
  var f = fn();
  f();
  f();
  f();
  f();
  f();
}

fn () {
  var n = 0;
  fn1 () {
    n++;
    print(n);
  };
  return fn1;
}

螺钉课堂视频课程地址:http://edu.nodeing.com

原文地址:https://www.cnblogs.com/dadifeihong/p/12047599.html