Dart-函数
参考:
函数与其它语言类似
bool isNoble(int atomicNumber) {
return _nobleGases[atomicNumber] != null;
}
省略了类型声明,函数依旧是可以正常使用的:
isNoble(atomicNumber) {
return _nobleGases[atomicNumber] != null;
}
如果函数中只有一句表达式,可以使用简写语法:
bool isNoble(int atomicNumber) => _nobleGases[atomicNumber] != null;
=> expr
语法是 { return expr; }
的简写。 =>
符号 有时也被称为 箭头
语法。
所有函数都会返回一个值。 如果没有明确指定返回值, 函数体会被隐式的添加 return null;
语句。
返回类型也可以是dynamic
void main() {
showOutput(square(5.0));
print(square.runtimeType);//(dynamic) => dynamic
}
dynamic square(var num) {
return num * num;
}
void showOutput(var msg) {
print(msg);
}
匿名函数
匿名函数, 有时候也被称为 lambda 或者 closure 。
([[Type] param1[, …]]) {
codeBlock;
};
例如,下面的遍历
var list = ['apples', 'bananas', 'oranges'];
list.forEach((item) {
print('${list.indexOf(item)}: $item');
});
如果函数只有一条语句, 可以使用箭头简写。
list.forEach(
(item) => print('${list.indexOf(item)}: $item'));
可选参数
可选参数可以是命名参数或者位置参数,但一个参数只能选择其中一种方式修饰。
Named parameters
如下的方法:
dynamic sum(var num1, var num2) => num1 + num2;
可以这样调用
void main() {
print(sum(2, 2));//4
}
但如果使用 {param1, param2, …}
,指定了命名参数,上面的形式,将会提示错误
需要使用如下的调用形式
void main() {
print(sum(num1: 2, num2: 4));//6
}
混合使用位置参数和命名参数
void main() {
print(sum(2, num2: 4));//6
}
dynamic sum(var num1, {var num2}) => num1 + num2;
需要注意的是,命名参数是可选的,如下的形式,写的时候,并不会出错
但在运行的时候,会提示如下的错误
原因是:在函数中使用到了num2
,但是却没有提供这个参数,可做如下的修改
默认参数值
上面的问题,还可以通过,提供默认参数值来解决
void main() {
print(sum(2));//2
print(sum(2, num2: 10));//12
}
dynamic sum(var num1, {var num2 = 0}) => num1 + num2;
位置可选参数
将参数放到 []
中来标记参数是可选的:
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');