美文网首页Dart
Dart - 函数(基本定义、必要参数和可选参数)

Dart - 函数(基本定义、必要参数和可选参数)

作者: LouisXWB | 来源:发表于2019-12-12 23:14 被阅读0次

    Dart 是一种真正面向对象的语言,所以即便函数也是对象并且类型为 Function,这意味着函数可以被赋值给变量或者作为其它函数的参数。你也可以像调用函数一样调用 Dart 类的实例。详情请查阅 可调用的类

    下面是定义一个函数的例子:

    bool isNoble(int atomicNumber) {
      return _nobleGases[atomicNumber] != null;
    }
    

    虽然高效 Dart 指南建议在公开的 API 上定义返回类型,不过即便不定义,该函数也依然有效(不推荐使用):

    bool isNoble(int atomicNumber) => _nobleGases[atomicNumber] != null;
    

    备忘📝:
    1、语法 => 表达式 是 { return 表达式; } 的简写, => 也称为箭头语法
    2、在 =>;之间的只能是 表达式 而非 语句。比如你不能将一个 if语句 放在其中,但是可以放置 条件表达式
    3、=>不能分开


    一 、函数可以有两种形式的参数:必要参数可选参数

    • 必要参数定义在参数列表前面
    • 可选参数则定义在必要参数后面。可选参数可以是 命名参数位置参数

    1、可选参数

    可选参数分为命名参数位置参数,可在参数列表中任选其一使用,但两者不能同时出现在参数列表中

    a 命名参数

    当你调用函数时,可以使用 参数名: 参数值 的形式来指定命名参数。例如:

    enableFlags(bold: true, hidden: false);
    

    定义函数时,使用{param1, param2, …}来指定命名参数:

    /// 设置 [bold] 和 [hidden] 标识……
    /// Sets the [bold] and [hidden] flags...
    void enableFlags({bool bold, bool hidden}) {...}
    

    虽然命名参数是可选参数的一种类型,但是你仍然可以使用 @required 注解来标识一个命名参数是必须的参数,此时调用者则必须为该参数提供一个值。例如:

    const Scrollbar({Key key, @required Widget child})
    

    如果调用者想要通过 Scrollbar 的构造函数构造一个 Scrollbar 对象而不提供 child 参数,则会导致编译错误。

    b 位置参数

    使用[]将一系列参数包裹起来作为位置参数:

    String say(String from, String msg, [String device]) {
      var result = '$from says $msg';
      if (device != null) {
        result = '$result with a $device';
      }
      return result;
    }
    

    下面是不使用可选参数调用上述函数的示例:

    assert(say('Bob', 'Howdy') == 'Bob says Howdy');
    

    下面是使用可选参数调用上述函数的示例:

    assert(say('Bob', 'Howdy', 'smoke signal') ==
        'Bob says Howdy with a smoke signal');
    
    c 默认参数值

    可以用 = 为函数的命名和位置参数定义默认值。


    备忘📝:
    1、默认值必须为编译时常量
    2、没有指定默认值的情况下默认值为 null


    下面是设置可选参数默认值示例:

    /// 设置 [bold] 和 [hidden] 标识……
    /// Sets the [bold] and [hidden] flags ...
    void enableFlags({bool bold = false, bool hidden = false}) {...}
    
    // bold 的值将为 true;而 hidden 将为 false。
    enableFlags(bold: true);
    

    Tips:在老版本的 Dart 代码中会使用冒号(:)而不是 = 来设置命名参数的默认值。原因在于刚开始的时候命名参数只支持 :。不过现在这个支持已经过时,所以现在还是 使用 = 来指定默认值

    ListMap 同样也可以作为默认值。下面的示例定义了一个名为 doStuff() 的函数,并为其名为 list 和 gifts 的参数指定了一个 List 类型的值和 Map 类型的值。(前面记得加const,才算编译时常量)

    void doStuff(
        {List<int> list = const [1, 2, 3],
        Map<String, String> gifts = const {
          'first': 'paper',
          'second': 'cotton',
          'third': 'leather'
        }}) {
      print('list:  $list');
      print('gifts: $gifts');
    }
    

    相关文章

      网友评论

        本文标题:Dart - 函数(基本定义、必要参数和可选参数)

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