【问题标题】:Should i return a value for a Future<void> Function?我应该为 Future<void> 函数返回一个值吗?
【发布时间】:2019-09-03 09:22:57
【问题描述】:

在 Dart 中,对于异步运行但不应该使用其返回值的函数有 2 个选项。

Future<Null>
Future<void>

从 Dart 2.0 开始,通常建议在大多数情况下使用 void 而不是 Null(由于警告不应使用 void 类型)。

对于这些,不应要求返回类型,但可以返回所有类型。但是这里的最佳实践是什么,我应该仍然返回一些东西,我应该以空返回 (1) 结束函数,返回 null 或其他东西 (2) 还是应该只结束函数 (3)?我是否可能错过了 3 个选项之间的任何本质区别,假设返回值没有被使用(例如 await exampleFunction() 在所有情况下都应该等到函数完成)?它本质上只是代码风格吗?

1)

Future<void> exampleFunction() async{
  ...
  return;
} 

2)

Future<void> exampleFunction() async{
  ...
  return null;
} 

3)

Future<void> exampleFunction() async{
  ...     
} 

【问题讨论】:

  • 对于返回void 的同步函数,你会怎么做?对于返回 Future&lt;void&gt;async 函数,执行相同的操作。

标签: asynchronous dart future void


【解决方案1】:

如果 async 方法返回 Future&lt;void&gt;,最佳做法是避免在其末尾返回空。但是,在某些情况下,您仍然可以使用return 退出该方法:

Future<void> exampleFunction() async{
  if (skip) return;
  await doSomething();     
} 

【讨论】:

  • 听起来很有道理,也是我的第一个直觉,基本上把它当作一个sync void函数来处理,通常最后没有返回,但如果你想早点返回,使用“return;”。由于回答/评论的 3 个人似乎同意,并且您的示例突出了回报的最佳使用,我接受这个。
【解决方案2】:

没有。 Future 类型只是表明该函数将被异步调用。

【讨论】:

  • "但是这里的最佳实践是什么" 使用 async/await,这样代码似乎是同步的。 “我还应该退货吗”我以前从未见过这种情况。 “我是否可能错过了 3 个选项之间的任何本质区别,假设返回值没有被使用(fe await exampleFunction() 在所有情况下都应该等到函数完成)?它本质上只是代码风格吗?“它不仅仅是编码风格.返回 void 意味着调用者不希望被函数修改。当您返回 null 时,调用者将被取消。
猜你喜欢
  • 2021-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-09
  • 2022-12-09
  • 2016-08-28
  • 1970-01-01
  • 2013-04-16
相关资源
最近更新 更多