美文网首页
Dart(5)函数

Dart(5)函数

作者: 谜夨_ | 来源:发表于2019-12-31 16:37 被阅读0次

    函数格式

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

    例子

    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);
    }
    

    相关文章

      网友评论

          本文标题:Dart(5)函数

          本文链接:https://www.haomeiwen.com/subject/euhfoctx.html