BetterProgramming Practice:更多功能与多用途功能

时间:2015-08-28 18:26:29

标签: javascript

哪个更有效,为什么? (将包括一个例子)

为每个特定任务或一个具有非常相似目的的函数编写多个函数,但只能一次执行一个需求。

例如:JavaScript,写入Google文档电子表格

根据设置的参数插入或删除函数

function insertOrDelete(insert, delete){
//if insert != null insert row
//if delete !=null delete row
//only one of the tasks are meant to be done at a time
}

VS 每个任务有两个独立的函数,这是一个很糟糕的例子,因为它们不是最相似的,但我想说的是,如果它对于更少的编码块更有效并且尽可能地重用相同的块或者让它直接指向阻止运行非常具体的任务?为什么?

5 个答案:

答案 0 :(得分:2)

我相当肯定有经验的程序员会同意我最好将这些功能分开

有人说过:

  

功能应该做一件事,一件事,做得好

所以,是的,你有答案。

分离功能使代码更容易读取可维护可测试

想象一下,在不眠之夜中阅读这两个功能会是什么样子:

insertOrDelete(null, 1);

VS

Delete(1);

第二种选择更明显,更少魔术,更容易阅读。

答案 1 :(得分:1)

最好写" Cohesive"代码:

https://en.wikipedia.org/wiki/Cohesion_(computer_science)

这基本上意味着类和方法应该只做一件事并且做得好。因此,直接回答您的问题,两个单独的功能更好,因为它可以让您更轻松地重用代码。

如果你真的想要你所描述的插入或删除功能,那么就这样做

function insertOrDelete(insertVar, deleteVar){
    if insert != null insert(insertVar)
    if delete !=null delete(deleteVar)
}

function insert(insertVar){
    insert(insertedVar);
}

function insert(deleteVar){
    delete(deleteVar);
}

我个人认为使用null引用有点hacky所以可能会做更像这样的事情

function insertOrDelete(var, insertOrDelete){
    if(insertOrDelete == "insert"){
        // insert it
    }else if(insertOrDelete == "delete"){
        // delete it
    }else{
        // error
    }
}

答案 2 :(得分:0)

这个问题会让你失望 - 因为它可能是基于意见的。您可以对一组功能或组合功能的模块化块进行测试 - 有时您会得到一个意外的结果,一个是“快速”#34; - 在某些情况下 - 而不是在其他情况下......它运行了多少次......等等。

然而,大多数情况下的差异都很小 - 模块化/可重用性/可读性的选择超过了你可能会对此过程中所迷恋的任何微速度。

如果你有一个功能,你可以加倍一些东西,那么让它独立是有意义的。

function double(input) {
    return (input * 2);
}

然后,如果你有另一个功能...你可以使用内部加倍 - 而不是再写一次......

或不! 这一切都基于这个场景!

但是经验会引导你选择一条道路 - 而且我愿意打赌,模块化会向你展示光明。

答案 3 :(得分:0)

作为一般经验法则,每个功能最好做一件事。

当然有例外。例如,如果您有一个处理来自外部源的请求的函数,它可能需要执行许多不同的操作,在这种情况下,您可以为每个操作创建不同的函数并根据需要调用它们。

在您给出的insertOrDelete示例中听起来可能很简单,但我已经看到了数千行的函数以及大量的case语句。那不是你想去的地方。

一个功能应该做一件事。

答案 4 :(得分:0)

这绝对是基于意见的。

有时候你会减慢速度,将每个函数分成不同的函数。有时候时间比未来的可用性和维护更重要。

当我发现自己在应用程序的后期需要类似的东西时,我发现自己正在编写所有内容并将其分解为单独的函数。

我没有意识到花时间在单独的函数中编写所有内容,只是为了拥有100个单独的函数,其中80个在整个应用程序中使用了一次。两种方式都有适当的时间。