更好的编程实践:更多的函数vs多用途函数

BetterProgramming Practice: more functions vs multi-use functions

本文关键字:函数 多用途 vs 编程 更好      更新时间:2023-09-26

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

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

例如:JavaScript,写入google docs电子表格

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

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
}

和每个任务两个单独的函数,这是一个糟糕的例子,因为它们不是最相似的,但我的观点是,如果它是更有效的编码块和重用相同的块尽可能多地或有它直接指向块运行非常具体的任务?为什么?

我相当肯定有经验的程序员会同意我的看法,最好将这些函数分开

有人曾经说过:

函数应该做一件事,只做一件事,把它做好

所以,是的,你有答案了。

分离函数使代码更容易阅读可维护可测试

想象一下在一个不眠之夜读取这两个函数会是什么样子:

insertOrDelete(null, 1);

Delete(1);

第二种选择更明显,不那么神奇,更容易阅读。

最好编写"内聚"代码:

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引用有点粗糙,所以可能会做这样的事情

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

一般来说,每个函数最好只做一件事。

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

在您给出的insertOrDelete示例中可能听起来很简单,但我见过数千行长的函数和大量的case语句集合。那不是你想去的地方。

一个函数只做一件事

这个问题会让你投反对票——因为它可能是基于意见的。您可以在一组函数或组合函数的模块块上运行测试-有时您会得到意想不到的结果-在某些情况下"更快"-而在其他情况下则不然……它运行了多少次……等。

然而,在大多数情况下,差异是如此之小-模块化/可重用性/可读性被选择在任何微速度,你可能会从中得到的困扰。

如果你有一个需要双精度运算的函数,那么将其单独设置是有意义的。

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

如果你有另一个功能…你可以在——而不是再写一遍……

!这都是基于场景!

但是经验会引导你选择一条道路——我敢打赌,模块化会给你带来光明。

这绝对是基于意见的。

有时将单个函数拆分为单独的函数会减慢速度。有时候时间比未来的可用性和维护更重要。

当我发现自己在应用程序中需要类似的东西时,我发现自己把所有东西都写出来,并把它们分成单独的函数。

我不认为花时间在单独的函数中编写所有内容有什么意义,只是为了有100个单独的函数,其中80个在整个应用程序中一次使用。在适当的时候,两种方式都可以做到。