24
A
回答
39
Dart有兩種類型的可選參數:命名爲和位置。在討論差異之前,讓我先討論相似之處。
Dart的可選參數是可選因爲呼叫者在調用函數時不需要爲參數指定一個值。
可選參數只能在任何必需參數後聲明。
可選參數可以有一個默認值,當調用者未指定值時使用該參數。
陣地可選參數
通過[ ]
纏繞的參數是一個位置可選參數。下面是一個例子:
getHttpUrl(String server, String path, [int port=80]) {
// ...
}
在上面的代碼,port
是可選的,並且具有的80
的默認值。
您可以使用或不使用第三個參數來調用getHttpUrl
。
getHttpUrl('example.com', '/index.html', 8080); // port == 8080
getHttpUrl('example.com', '/index.html'); // port == 80
您可以爲函數指定多個位置參數:
getHttpUrl(String server, String path, [int port=80, int numRetries=3]) {
// ...
}
的可選參數是在位置如果要指定numRetries
不能省略port
。
getHttpUrl('example.com', '/index.html');
getHttpUrl('example.com', '/index.html', 8080);
getHttpUrl('example.com', '/index.html', 8080, 5);
當然,除非你知道8080和5,這是很難說的顯然是魔力數字。您可以使用名爲可選參數的來創建更易讀的API。
命名可選參數
通過{ }
包裹的參數是一個命名可選參數。這裏有一個例子:
getHttpUrl(String server, String path, {int port: 80}) {
// ...
}
可以調用getHttpUrl
使用或不使用第三個參數。您在調用函數時必須使用參數名稱必須。由於命名參數是按名稱引用
getHttpUrl(String server, String path, {int port: 80, int numRetries: 3}) {
// ...
}
,他們可以從他們的聲明不同的順序使用:
getHttpUrl('example.com', '/index.html', port: 8080); // port == 8080
getHttpUrl('example.com', '/index.html'); // port == 80
您可以爲函數指定多個命名參數。
getHttpUrl('example.com', '/index.html');
getHttpUrl('example.com', '/index.html', port: 8080);
getHttpUrl('example.com', '/index.html', port: 8080, numRetries: 5);
getHttpUrl('example.com', '/index.html', numRetries: 5, port: 8080);
getHttpUrl('example.com', '/index.html', numRetries: 5);
我相信命名參數使得更容易理解的調用點,尤其是當有布爾標誌或外的情況下的數字。
如果可選參數是提供
不幸的是,你不能將案件「一個可選的參數沒有提供」和「可選參數得到了默認值」區分檢查。
注:您可以使用位置可選參數或命名的可選參數,但不是在同一個函數或方法都。以下是不允許的。
thisFunctionWontWork(String foo, [String positonal], {String named}) {
// will not work!
}
相關問題
- 1. 參數和選項有什麼區別?
- 2. 命令參數和菜單貢獻參數有什麼區別
- 3. 中有什麼函數參數和參數之間......區別
- 4. 默認和[可選]參數有什麼區別?
- 5. 在powershell中參數和參數有什麼區別?
- 6. dart callMatcher命名參數
- 7. maven命令中的兩個可選參數:「-fn」v.s「-Dmaven.test.failure.ignore = true」,有什麼區別?
- 8. oracle「初始化參數」和「會話參數」有什麼區別?
- 9. 程序參數和VM參數有什麼區別?
- 10. 爲什麼dart可選的命名參數不爲空(如果未提供)?
- 11. MonoDevelop中的命名參數和可選參數
- 12. MVC2中的可選參數和命名參數,語言規範
- 13. 請求中的數據和參數有什麼區別?
- 14. 函數參數中的A和A []有什麼區別?
- 15. 具有可選參數的git別名
- 16. Informatica參數有什麼區別?
- 17. 這兩個參數有什麼區別?
- 18. c中的命令行參數和scanf函數有什麼區別?
- 19. 可選命名參數
- 20. 函數中直接參數和全局參數之間有什麼區別?
- 21. 使用命名參數和可選參數來區分構造函數
- 22. C++中的no參數和void參數之間有什麼區別?
- 23. 一個方法的輸出與參數和沒有參數有什麼區別?
- 24. SSIS 2012中的參數和變量有什麼區別?
- 25. JVM中的 - ,-X params和-XX參數有什麼區別?
- 26. Java中的String ... args和String []參數有什麼區別嗎?
- 27. Catalyst:中的參數和:CaptureArgs之間有什麼區別?
- 28. onItemClick在Android中的「int」和「long」參數有什麼區別
- 29. 參數和參數之間的區別
- 30. {參數}和參數之間的區別?
?運算符已被棄用。我在飛鏢教程中發現只有scale == null條件。 (expr1?expr2:expr3仍然有效) –
對於函數的多個命名參數,這很難找到!在文檔的構造器部分看起來會更好嗎? ;) – willsquire
根據https://www.dartlang.org/guides/language/language-tour#optional-positional-parameters,默認值現在應該用'='而不是':'指定。 – nbro