Dart

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

2019-12-12  本文已影响0人  LouisXWB

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');
}
上一篇下一篇

猜你喜欢

热点阅读