任何應(yīng)用都必須有一個(gè)頂級 main() 函數(shù),作為應(yīng)用服務(wù)的入口。 main() 函數(shù)返回值為空,參數(shù)為一個(gè)可選的 List<String> 。
下面是 web 應(yīng)用的 main() 函數(shù):
void main() {
querySelector('#sample_text_id')
..text = 'Click me!'
..onClick.listen(reverseText);
}
提示:
以上代碼中的 .. 語法為 級聯(lián)調(diào)用 (cascade)。 使用級聯(lián)調(diào)用, 可以簡化在一個(gè)對象上執(zhí)行的多個(gè)操作。
下面是一個(gè)命令行應(yīng)用的 main() 方法,并且使用了輸入?yún)?shù):
// 這樣運(yùn)行應(yīng)用: dart args.dart 1 test
void main(List<String> arguments) {
print(arguments);
assert(arguments.length == 2);
assert(int.parse(arguments[0]) == 1);
assert(arguments[1] == 'test');
}
使用 args library 可以定義和解析命令行參數(shù)。
一個(gè)函數(shù)可以作為另一個(gè)函數(shù)的參數(shù)。 例如:
void printElement(int element) {
print(element);
}
var list = [1, 2, 3];
// 將 printElement 函數(shù)作為參數(shù)傳遞。
list.forEach(printElement);
同樣可以將一個(gè)函數(shù)賦值給一個(gè)變量,例如:
var loudify = (msg) => '!!! ${msg.toUpperCase()} !!!';
assert(loudify('hello') == '!!! HELLO !!!');
示例中使用了匿名函數(shù),參考下面。
多數(shù)函數(shù)是有名字的, 比如 main() 和 printElement()。 也可以創(chuàng)建沒有名字的函數(shù),這種函數(shù)被稱為 匿名函數(shù), 有時(shí)候也被稱為 lambda 或者 closure 。 匿名函數(shù)可以賦值到一個(gè)變量中, 舉個(gè)例子,在一個(gè)集合中可以添加或者刪除一個(gè)匿名函數(shù)。
匿名函數(shù)和命名函數(shù)看起來類似— 在括號之間可以定義一些參數(shù)或可選參數(shù),參數(shù)使用逗號分割。
后面大括號中的代碼為函數(shù)體:
([[Type] param1[, …]]) { codeBlock; };
下面例子中定義了一個(gè)包含一個(gè)無類型參數(shù) item 的匿名函數(shù)。 list 中的每個(gè)元素都會(huì)調(diào)用這個(gè)函數(shù),打印元素位置和值的字符串。
var list = ['apples', 'bananas', 'oranges'];
list.forEach((item) {
print('${list.indexOf(item)}: $item');
});
void main() {
var list = ['apples', 'bananas', 'oranges'];
list.forEach((item) {
print('${list.indexOf(item)}: $item');
});
}
如果函數(shù)只有一條語句, 可以使用箭頭簡寫。
list.forEach(
(item) => print('${list.indexOf(item)}: $item'));
更多建議: