不讲理论,代码实践

一、函数的基本使用

1、函数的声明和使用

建议所有函数都声明返回类型,没有返回值声明 void 类型。

void printTitle(String title) {
  print('The title : ${title.toString()}');
}

String getName(String firstName, String lastName) {
  String res =  'my name is ${firstName}-${lastName}';
  printTitle(res);
  return res;
}

int getSum(int num) {
  int sum = 0;
  for (int i=1; i<=num; i++) {
    sum += i;
  }
  return sum;
}

使用函数:

 String title = '标题';
  printTitle(getName('post', 'bird'));
  print(getSum(6));
  print(getSum(100));
  print(getSum(50));

输出结果:

1.jpg

2、可选参数 和 默认参数

dart 中声明可选参数,需要在参数列表声明 List 格式的参数列表,表明是可选的。

如果要声明参数的默认值,可以直接在参数后面赋值。

// 可选参数 & 默认参数
void printInfo(String name, [int age, String sex = '男']) {
  if(age == null) {
    print('my name is ${name}, sex is ${sex}');
  } else {
    print('my name is ${name}, age is ${age}, sex is ${sex}');
  }
}

函数使用:

 printInfo('postbird');
  printInfo('postbird', 20);
  printInfo('postbird', 20, '女');

输出结果:

2.jpg

3、命名参数

dart 可以指定参数名称,而不需要传入一个 Map 才能指定名称,这点非常实用,在 flutter 中大多数 widegt 的构造方法中,使用的是命名参数。

// 命名参数
void printInfo2(String name, {int age, String sex = '男'}) {
  if(age == null) {
    print('my name is ${name}, sex is ${sex}');
  } else {
    print('my name is ${name}, age is ${age}, sex is ${sex}');
  }
}

在 Flutter 中如果参数都使用命名参数,要指定某个参数是必须传递的,则需要通过 @required 注解

class Test {
  final String name;
  Test({
    @required this.name,
  });
}

4、函数作为参数

executeFunction(fn, [args]) {
  if (fn != null) {
    return fn(args);
  }
}

二、箭头函数

  List l1 = [1, 2];

  l1.forEach((item) {
    print(item);
  });

  l1.forEach((item) => print(item));

箭头函数只能有一行,可以省略大括号

在 map 方法中使用箭头函数:

 var l2 = l1.map((item) {
    return item % 2 == 0 ? item * 2 : item;
  });
  print(l2.toList());

  var l3 = l1.map((item) => item % 2 == 0 ? item * 2 : item);
  print(l3);

输出结果:

3.jpg

三、匿名函数

  Function getInfo = (String name, int age, [String sex = '男']) {
    print('My name is ${name}, my age is ${age}, my sex is ${sex}');
  };

  getInfo('postbird', 20);

四、立即执行函数

 // 立即执行方法
  ((name) {
    print('my name is ${name}');
  })('postbird');

五、闭包

  // 闭包
  Function getA() {
    int a = 0;
    return () {
      a++;
      print(a);
    };
  }

  Function b = getA();
  b();
  b();

输出结果:

4.jpg