我有一个特定的函数使用相同的代码行(很少,2-5 取决于我如何更改它以适应未来可能的用途)代码行 4 次。
我看了这个问题,但它对我来说不够具体,也不符合我要找的方向。
这是一些伪:
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 行重复代码。显然,对其进行功能化会使它更具可读性,但是这是非常具体的功能,在其他任何地方都没有使用。我可以编写以消除复制/粘贴心态的功能类似于:
function myHelperFunction(someParameter, someOtherParameter) {
// Code line 1
// Code line 2
// Code line 3
return usefulInformation;
}
然后在所有这些条件语句中调用该函数作为每个条件语句 1 行:
myHelperFunction(myPassedParameter, myOtherPassedParameter);
基本上把这 12 行变成了 4 行。
所以问题是——这是一个很好的做法吗?为非常少量的代码创建一个新函数以节省一些空间和可读性?或者跳跃功能的成本是否太影响而不值得?是否应该为将来可能复制/粘贴的任何代码创建一个新函数?
PS - 我知道如果这段代码要在不同的(类)或源文件中使用,将它变成一个函数是合乎逻辑的,以避免需要找到它被复制/粘贴的所有位置以便做出改变。但我说的或多或少是单文件/单类或功能内的一种困境。此外,如果我没有正确执行,请随时修复我的标签/标题。我不太确定如何正确命名/标记这篇文章。