【问题标题】:Does it make a difference when I return the value from a method?当我从方法返回值时会有所不同吗?
【发布时间】:2017-11-26 02:11:19
【问题描述】:

这是我目前的代码 - 我只是遍历一些列表并返回字符串。

public string CreateCharacterName (int category) {
    string name = "";

    if(category == 0) {
        int r = Random.Range(0, Names(Roots("Characters", "CharacterNames"), 0).Count);
        name = Names(Roots("Characters", "CharacterNames"), 0)[r];
    }

    return name;
}

我已经删掉了一堆类似的 if 语句,但是我想知道在得到结果之后是否应该将“返回名称”部分放入每个 if 语句中,或者这样就可以了是?两者都有效,我只是认为该方法将继续检查每个后续 if 语句对“类别”,然后返回字符串,这是正确的,是否有成本?

谢谢!

【问题讨论】:

  • 如果其他语句实际上是普通的 if 语句而不是 else if 的一部分,那么您是正确的。但至于成本,除非比较往往变得超级复杂,否则可能可以忽略不计。
  • 它们不会更复杂,但会有很多这类方法。是的,他们不是 else/if。
  • 在得到结果后就调用return 通常被称为“提前输出”,这是一种通常用于避免不必要的计算/操作的优化技术。
  • Jon,如果它们是互斥的检查,那么它们也可能是 else,这样就不会发生不必要的检查。此外,如果超过 4 或 5 个,请考虑使用 switch 语句。既然你在这个方法中只是一个任务,你没有理由不能早点回来。
  • 如果你把你的 if 变成 else-if,那么它就和在每个 if 中添加 return 一样。但是,在每个语句中添加返回行也使阅读变得更加困难

标签: c# unity3d return


【解决方案1】:

没关系。您的 cyclomatic complexity 是 2,即您的代码只有 1 个二进制路径,这很好。移动return name; 语句会增加一点,但这还不错。根据经验,尽量降低复杂性。

【讨论】:

  • 酷,我必须牢记这些信息以备不时之需 - 我倾向于过于复杂!
【解决方案2】:

如果微秒优化很重要,为什么不跳过使用变量而直接使用:

return Names(Roots("Characters", "CharacterNames"), 0)[r];

【讨论】:

  • 感谢您的提示 - 这并不是特别是因为我只是担心最终它会变得有点多,但是您说得对,我可能不需要该变量。
猜你喜欢
  • 1970-01-01
  • 2021-04-19
  • 1970-01-01
  • 2021-07-06
  • 1970-01-01
  • 1970-01-01
  • 2014-07-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多