Dart(5)函数

函数格式

返回值 函数名(参数){
    函数体
}

例子

bool isEmpty(String data){
      return data == null;
}

//也可以省略 返回值
isEmpty(String data){
      return data == null;
}

//=> 如果只有一行 可以使用这个
bool isEmpty(String data) => data == null;

可选参数

函数允许定义可选的参数。

定义可选参数有两种方式一种使用{}, 另一种使用[]。区别就是, 如果用{}声明,在使用时必须带着参数名,如果用[]声明,在使用时需要按照顺序使用。

void main() {
    travel(); // From null to null
    travel(to:"usa"); // From null to usa;
    travel(from:"china", to:"usa"); // From china to usa;
    travel2("china"); // From china to null and null;
    travel2("china", "usa"); // From china to usa and null;
    travel2("china", "usa", "england"); // From china to usa and england;
}

void travel({String from, String to}){
    print("From $from to $to");
}
 
void travel2(String from, [String to, String city]){
    print("From $from to $to and $city");
}   

使用 @required注释表示参数是 required 性质的命名参数
什么意思那就选填的变成必填,如果没有填编译器会报错
package:flutter/material.dart flutter中
package:meta/meta.dart dart中
引入上述2个包之一才可以使用

void main() {
    //travel(); //错误 
   // travel(to:"usa"); //错误
    travel(from:"china", to:"usa"); // From china to usa;
}

void travel({@required String from, String to}){
    print("From $from to $to");
}

参数默认值

函数的参数可以用=来定义默认值,如果没有用=赋予默认值,那么参数默认值为null。
参数的默认值必须是编译时常量。

void travel({String from="china", String to="usa"}){
  print("From $from to $to");
}
//map set list 的默认值需要用const修饰
void animals(
    [List<String> names = const ["cat", "dog"],
    Map<String, String> nameMap = const {"c": "cat", "d": "dog"}]) {
  print("animals: $names");
  print("nameMap: $nameMap");
}

匿名函数

多数函数是有名字的, 比如 main() 和 printElement()。 也可以创建没有名字的函数,这种函数被称为 匿名函数, 有时候也被称为 lambda 或者 closure 。 匿名函数可以赋值到一个变量中, 举个例子,在一个集合中可以添加或者删除一个匿名函数。

([[Type] param1[, …]]) { 
  codeBlock; 
};

//例子
var list = ['apples', 'bananas', 'oranges'];
list.forEach((item) {
    print('${list.indexOf(item)}: $item');
}); 

词法作用域

变量的作用域是固定的, 简单说变量的作用域在编写代码的时候就已经确定了。 花括号内的是变量可见的作用域。

闭包

闭包 即一个函数对象,即使函数对象的调用在它原始作用域之外, 依然能够访问在它词法作用域内的变量。
函数可以封闭定义到它作用域内的变量。

void main() {
  // 创建一个加 2 的函数。
  var add2 = makeAdder(2);
  // 创建一个加 4 的函数。
  var add4 = makeAdder(4);
  print(add2(3));//5
  print(add4(3));//7
}

/// 返回一个函数
Function makeAdder(num addBy) {
  return (num i) => addBy + i;
}

返回值

所有函数都会返回一个值。 如果没有明确指定返回值, 函数体会被隐式的添加 return null; 语句。

foo() {}
void main() {
    print(foo() == null);
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容