首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >良好的编码实践:何时创建新函数

良好的编码实践:何时创建新函数
EN

Stack Overflow用户
提问于 2013-06-27 17:00:22
回答 5查看 1.2K关注 0票数 2

我有一个特定的函数,它使用相同的代码行(很少,2-5,这取决于我如何修改它以适应将来可能的使用)代码行4次。

我看了this question,但对我来说不够具体,也不符合我想要的方向。

下面是一些

代码语言:javascript
运行
复制
function myFunction() {
  if (something) {
    // Code line 1
    // Code line 2
    // Code line 3
  }
  else if (somethingElse) {
    // Code line 1
    // Code line 2
    // Code line 3
  }
  else if (anotherThing) {
    // Code line 1
    // Code line 2
    // Code line 3
  }
  else if (theLastThing) {
    // Code line 1
    // Code line 2
    // Code line 3
  }
  else {
  // Not previously used code
  }
}

相同的3行代码被复制/粘贴(如果满足这些条件,则构造相同的对象)。创建一个函数,将所有这些信息传递给它,并在它完成后返回必要的信息,这是一个很好的实践吗?所有这些条件语句都在一个循环中,该循环最多可运行1000次。

我不确定准备堆栈框架的成本是否(?)跳入另一个函数比1000次迭代花费更大,因此值得使用15行重复代码。显然,函数化它将使它更易读,但这是非常具体的功能,不使用任何其他地方。为了消除复制/粘贴心态,我可以编写的函数如下:

代码语言:javascript
运行
复制
function myHelperFunction(someParameter, someOtherParameter) {
  // Code line 1
  // Code line 2
  // Code line 3
  return usefulInformation;
}

然后将所有条件语句中的函数调用为每条条件语句1行:

代码语言:javascript
运行
复制
myHelperFunction(myPassedParameter, myOtherPassedParameter);

基本上把这12条线变成4条。

所以问题--,这是一个很好的实践吗?在一般的中,为了节省一些空间和可读性,为少量代码创建一个新的函数吗?还是跳跃功能的代价太大了,不值得呢?一个应该总是为将来可能复制/粘贴的代码创建一个新函数吗?

PS -我理解,如果在不同的(类)或源文件中使用这段代码,那么将其转换为函数是合乎逻辑的,以避免为了进行更改而需要找到复制/粘贴的所有位置。但我说的是或多或少的单文件/单类或函数中的困境。此外,如果我没有正确地修改我的标签/标题,请随意修改它。我不太清楚如何正确地标出这篇文章的标题/标签。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-06-27 17:10:24

对于任何不是算法/数据结构问题的优化问题的答案是:配置您的代码!只对显示为问题区域的事物进行优化。

这意味着您应该了解函数调用开销是否实际上是您正在编写的特定程序中的性能问题。如果是的话,将代码内联。如果不是,那就别说了。就这么简单。

票数 3
EN

Stack Overflow用户

发布于 2013-06-27 17:06:10

是的,创建一个函数,一般来说,你应该遵循干性原则。不要重复你自己。

yourself

对于这种情况,堆栈操作将是最小的。见Imre Kerr对您问题的评论。

这不仅仅是为了可读性。原因太多了。可维护性是巨大的。如果这段代码必须改变,那么其他人就会很痛苦,试图找出每一个地方来改变它。只需在一个地方更改代码就好多了。

票数 1
EN

Stack Overflow用户

发布于 2013-06-27 17:07:09

在我看来,你对待这件事的方式是错误的。首先,您不应该使用所有执行相同代码的多个(否则)I;使用一个带有复合或预计算(在本例中,由于所有可能的子条件而建议预先计算)的条件。像这样的东西可能会使代码的维护变得更加容易。

代码语言:javascript
运行
复制
function myFunction() {
  bool condition = something ||
                   somethingElse ||
                   anotherThing ||
                   theLastThing;

  if (condition) {
    // Code line 1
    // Code line 2
    // Code line 3
  }
  else {
  // Not previously used code
  }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17349086

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档