函数----命名参数:
void enableFlags(bool bold,{bool hidden}){
if(bold){
print('YES bold');
}
if(hidden){
print('YES hidden');
}
}
void main(){
enableFlags(true,hidden:true);
}
void 返回值
enableFlags 函数名
bold 参数名A
hidden 参数名B
{…} 函数主体
可选参数 —将参数放到 [] 中来标记参数是可选的:
String say(String from, String msg, [String device]) {
var result = '$from says $msg';
if (device != null) {
result = '$result with a $device';
}
return result;
}
在这里 device 不传,不会引起编译器错误提示
默认参数 在参数后=赖定于可选参数默认值
void enableFlags({bool bold = false, bool hidden = false}) {...}
设置了默认参数以后 ,即使不传参数 也不会引起编译器错误提示,只能在命名参数,可选参数,才能配置默认值。
main函数 作为应用服务的入口 ,返回值为void ,参数是一个可选的List
void main (){
}
匿名函数 closure
([[Type] param1[, …]]) {
codeBlock;
};
====== 例子:
var list = ['apples', 'bananas', 'oranges'];
list.forEach((item) {
print('${list.indexOf(item)}: $item');
});
请在main方法中执行上述例子,该foreach方法遍历了list的每一个元素。
语法闭包
/// 返回一个函数,返回的函数参数与 [addBy] 相加。
Function makeAdder(num addBy) {
return (num i) => addBy + i;
}
void main() {
// 创建一个加 2 的函数。
var add2 = makeAdder(2);
// 创建一个加 4 的函数。
var add4 = makeAdder(4);
assert(add2(3) == 5);
assert(add4(3) == 7);
}
测试函数是否相等:
void foo() {} // 顶级函数
class A {
static void bar() {} // 静态方法
void baz() {} // 示例方法
}
void main() {
var x;
// 比较顶级函数。
x = foo;
assert(foo == x);
// 比较静态方法。
x = A.bar;
assert(A.bar == x);
// 比较实例方法。
var v = A(); // A的1号实例
var w = A(); // A的2号实例
var y = w;
x = w.baz;
// 两个闭包引用的同一实例(2号),
// 所以它们相等。
assert(y.baz == x);
// 两个闭包引用的非同一个实例,
// 所以它们不相等。
assert(v.baz != w.baz);
}
返回值
所有函数都会返回一个值。 如果没有明确指定返回值, 函数体会被隐式的添加 return null; 语句。
foo() {}
assert(foo() == null);