經常搞不清楚dart命名參數與位置參數的區別?現在我們來對比一下,位置參數與命名參數的區別。
Dart 有兩種類型的可選參數,分別是命名可選參數和位置可選參數。在我討論差異之前,讓我先看看兩者的相似之處。
Dart 可選命名參數和可選位置參數在調用函數時不需要為參數指定值。可選命名參數和可選位置參數只能在任何必需參數之后聲明。
可選命名參數和可選位置參數可以有一個默認值,在調用者沒有指定值時使用。這就是兩種可選參數相同點。
不同之處是可選位置參數使用[ ]
包裹參數。可選命名參數使用{ }
包裹參數。
可選位置參數
使用[ ]
包裹的參數是一個可選位置參數。例如代碼getHttpUrl(String server,[int port=80]) {}
,port
是可選的,默認值為80
。
您可以在調用getHttpUrl
使用或不使用第三個參數。這種方式聲明函數的好處是使你的代碼更為簡潔,但缺失可讀性。
例如以下代碼,除非您知道8080和5是什么,否則很難說出那些看似神奇的數字是什么。您可以使用命名的可選參數來創建更具可讀性的API。
getHttpUrl(String server,url,String url,[int port=80]) {}
getHttpUrl('example.com', '/index.html', 8080); // port == 8080
getHttpUrl('example.com', '/index.html'); // port == 80
可選命名參數
使用{ }
包裹的參數是一個命名的可選參數。您可以使用或不使用位置可選參數。但是當你使用位置可選參數時,你必須使用參數名稱傳遞參數。
在命令可選參數中,你不必按順序傳遞可選的命名參數,因為命名參數是按名稱引用,所以它們的使用順序可以不同于它們的聲明順序。
這一點相對于位置可選參數,更易于閱讀和理解,缺點就是不夠簡潔。在兩者的選擇取決你個人需求。
getHttpUrl(String server, String path, {int port = 80}) {
// ...
}
getHttpUrl('example.com', '/index.html', port: 8080); // port == 8080
getHttpUrl('example.com', '/index.html'); // port == 80
結論
至此,你已經了解如何在可選位置參數和命名可選參數之間的區別。可選項位置參數會使代碼更為簡潔,可選命名參數會使代碼易于閱讀和理解。
-
參數
+關注
關注
11文章
1864瀏覽量
32569 -
代碼
+關注
關注
30文章
4857瀏覽量
69526 -
Dart
+關注
關注
0文章
9瀏覽量
1775
發布評論請先 登錄
相關推薦
評論