Dart是面向对象的语言,因此 函数也是对象,而且拥有一个类型,叫 Function
。这意味着,函数能够赋值给某些变量 或者 当作参数传递给其余函数。甚至你能够把一个Dart类的实例当作函数来调用。 具体可参考 Callable classes。
下面是一个函数的例子:bash
bool isNoble(int atomicNumber) {
return _nobleGases[atomicNumber] != null;
}
复制代码
固然,dart也支持隐藏类型,下方的函数依然工做(Effectvie Dart 并不推荐这么作 , type annotations for public APIs):ide
isNoble(atomicNumber) {
return _nobleGases[atomicNumber] != null;
}
复制代码
若是函数只有一条表达式,还可使用简写的语法:函数
bool isNoble(int atomicNumber) => _nobleGases[atomicNumber] != null;
复制代码
=> expr
语法 至关于 {return expr;}
. 而一个函数能够拥有两种类型的参数, 必须参数 和 可选参数。必选参数必须出如今前面,后面才能跟可选参数。名称可选参数 也能够被标记为 @required
.ui
若是你想让dart class 能够像函数同样被调用, 须要实现 call() 方法。atom
class WannabeFunction {
call(String a, String b, String c) => '$a $b $c!';
}
main() {
var wf = new WannabeFunction();
var out = wf("Hi","there,","gang");
print('$out');
}
复制代码
可选参数又能够分为位置可选或者名称可选,但不能同时出现。spa
当你调用一个函数时,你能够指定参数名称,语法 paramName: value
。 举例:code
enableFlags(bold: true, hidden: false);
复制代码
那如何定义这样的函数呢?使用 {param1, param2, …}
来指定名称参数:cdn
/// Sets the [bold] and [hidden] flags ...
void enableFlags({bool bold, bool hidden}) {...}
复制代码
Flutter 中实例建立表达式很复杂,因此 widget 构造时使用名称可选参数。这使得 实例建立表达式 更易读。对象
你可使用@required
注解来标注名称参数,在任何dart代码中,这表示这是一个 必填的参数。 举例:get
const Scrollbar({Key key, @required Widget child})
复制代码
当一个Scrollbar
被构建的时候,若是缺失 child
字段,语法会报错。
Required
定义在meta包中。能够直接导入 package:meta/meta.dart
,也能够导入其余包来暴露 meta
, 比方说 package:flutter/material.dart
。
用[]
来包装一些列的函数参数,来表示他们是 位置可选参数:
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');
复制代码
可使用=
来定义默认值,无论是 名称仍是位置可选参数。默认值必须是 编译时常量, 若是没有默认值提供,那默认将会是null
。
下面是给名称可选参数设置默认值的例子:
/// Sets the [bold] and [hidden] flags ...
void enableFlags({bool bold = false, bool hidden = false}) {...}
// bold will be true; hidden will be false.
enableFlags(bold: true);
复制代码
下面的例子时 如何给位置可选参数设置默认值:
String say(String from, String msg,
[String device = 'carrier pigeon', String mood]) {
var result = '$from says $msg';
if (device != null) {
result = '$result with a $device';
}
if (mood != null) {
result = '$result (in a $mood mood)';
}
return result;
}
assert(say('Bob', 'Howdy') ==
'Bob says Howdy with a carrier pigeon');
复制代码
你也能够传递 lists 或者 maps 做为默认参数。 下例子中的函数, doStuff()
就指定了 list
参数的默认值(是个list) 和 gifts
参数的默认值(是个map):
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 函数 和 可选参数相关知识点啦。
若是你以为这篇文章对你有益,还请帮忙转发和点赞,万分感谢。