dart 命名参数,位置参数与可选参数区别
经常搞不清楚dart命名参数比位置参数的区别?现在我们来对比一下,位置参数与命名参数的区别
经常搞不清楚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
结论
至此,你已经了解如何在可选位置参数和命名可选参数之间的区别。可选项位置参数会使代码更为简洁,可选命名参数会使代码易于阅读和理解。
在两者的选择取决你个人需求。如你任何问题,请发表你的评论。