是什么在DART命名和位置参数的区别?(What is the difference between

2019-07-03 15:14发布

DART支持两个命名可选参数和位置可选参数。 什么是两者之间的区别是什么?

此外,你怎么能告诉我们,如果确实指定了一个可选的参数?

Answer 1:

飞镖有两种类型可选参数: 命名位置 。 在我讨论的分歧,让我首先讨论的相似之处。

飞镖的可选参数是在调用者不需要调用函数时的参数指定值可选

可选参数只能任何所需的参数后声明。

可选参数可以有一个默认值,当主叫方未指定的值被使用。

位置可选参数

由缠绕的参数[ ]是一个位置可选参数。 下面是一个例子:

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!
}


Answer 2:

当使用“PARAMNAME:值”指定的函数的参数语法,那么它是一个命名参数。 这样的参数可以通过[和]括号之间包围它们呈现可选的。 这个功能的一个基本的演示可以在下面的Hello World程序来证明:

sayHello([String name = ' World!']) {
  print('Hello, ${name}');
}

void main() {
  sayHello('Govind');
}


Answer 3:

从文档 ,我们得到这两个positionalnamed参数是可选的,这意味着它们都可以没有。

在我看来, named参数比更严格的positional的。 例如,如果你声明这样的方法:

String say({String from, String msg})

以上frommsgnamed参数,当你调用方法say你必须使用say(from: "xx", msg: "xx") 该键不能缺席。

但是,如果您使用位置参数,你是自由的。



Answer 4:

在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

>>可选命名参数

  • 参数将与花括号公开{}
  • 花括号内的参数都是可选的。
  • 必须使用参数名称分配哪些与colan分离的值
  • 在花括号内的参数顺序无所谓
  • 这些类型参数帮助我们避免混乱而通过价值其中有许多参数的函数。

例:

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



文章来源: What is the difference between named and positional parameters in Dart?
标签: dart