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]) {
// ...
}
可选的参数是位置在,你不能忽略port
,如果你想指定numRetries
。
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('example.com', '/index.html', port: 8080); // port == 8080
getHttpUrl('example.com', '/index.html'); // port == 80
您可以指定一个函数的多个命名参数:
getHttpUrl(String server, String path, {int port = 80, int numRetries = 3}) {
// ...
}
由于命名参数是用名字引用的,他们可以从他们的声明不同的顺序使用。
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!
}
当使用“PARAMNAME:值”指定的函数的参数语法,那么它是一个命名参数。 这样的参数可以通过[和]括号之间包围它们呈现可选的。 这个功能的一个基本的演示可以在下面的Hello World程序来证明:
sayHello([String name = ' World!']) {
print('Hello, ${name}');
}
void main() {
sayHello('Govind');
}
从文档 ,我们得到这两个positional
和named
参数是可选的,这意味着它们都可以没有。
在我看来, named
参数比更严格的positional
的。 例如,如果你声明这样的方法:
String say({String from, String msg})
以上from
和msg
被named
参数,当你调用方法say
你必须使用say(from: "xx", msg: "xx")
该键不能缺席。
但是,如果您使用位置参数,你是自由的。
在DART中使用我的理解,方法参数可以在两种类型给出。
>>所需的参数
必需的参数是一个众所周知的旧式参数,大家都熟悉了吧
例如 :
findVolume(int length, int breath, int height) {
print('length = $length, breath = $breath, height = $height');
}
findVolume(10,20,30);
输出:
length = 10, breath = 20, height = 30
>>可选定位参数
参数将方括号[]方括号参数被公开是可选的。
例:
findVolume(int length, int breath, [int height]) {
print('length = $length, breath = $breath, height = $height');
}
findVolume(10,20,30);//valid
findVolume(10,20);//also valid
输出:
length = 10, breath = 20, height = 30
length = 10, breath = 20, height = null // no value passed so height is null
>>可选命名参数
例:
findVolume(int length, int breath, {int height}) {
print('length = $length, breath = $breath, height = $height');
}
findVolume(10,20,height:30);//valid & we can see the parameter name is mentioned here.
findVolume(10,20);//also valid
输出:
length = 10, breath = 20, height = 30
length = 10, breath = 20, height = null
>>可选默认参数
例:
findVolume(int length, int breath, {int height=10}) {
print('length = $length, breath = $breath, height = $height');
}
findVolume(10,20,height:30);//valid
findVolume(10,20);//valid
输出:
length = 10, breath = 20, height = 30
length = 10, breath = 20, height = 10 // default value 10 is taken
感谢从这个视频链接给出明确的解释,贷款给视频创作者。
视频链接:OptionalPositionalParameters
视频链接:OptionalNamedParameters
视频链接:OptionalDefaultParameters