函數----命名參數:
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);