0

在编写程序时,作为一个业余程序员,我的理解是,有三种方法可以完成大部分事情:

  • 创建循环
  • 创建和使用函数
  • 创建和使用对象

我在这里使用 javascript 来问我的问题,因为我大约在 2-3 周前开始学习它。与我在大学的 python 或 MatLab 中使用的相比,这有点奇怪,但这不是重点。我经常认为在三个特定应用程序中什么应该是好的选择,所以我想知道你的建议。

我想创建一个数组列表以供随后用于绘图。该程序应该采用方程的系数、增量步长和 x 值的边界。下面是代码(如果我在更改为适合 SO 时遗漏了以下内容,很抱歉,但它在不久之前就可以工作了!):

function array_creator(input_coeff,inc, boundary){
var bound=boundary||[0,1];
var eqn_deg=input_coeff.length-1;
var increment=inc;
var x_init=bound[0];
var y_val=0;
var graph_array=[];
while (x_init<=bound[1]){
    for(var i=0;i<input_coeff.length;i++){
        y_val=y_val+input_coeff[i]*Math.pow(x_init,eqn_deg);
        eqn_deg--;
            }

    new_arr=[x_init,y_val];
    eqn_deg=input_coeff.length-1;
    y_val=0;
    graph_array.push(new_arr);
    x_init=x_init+increment;
    }
return graph_array;
}

在上面的代码中,我有一个嵌套循环,它在 while 内部,但我习惯于编写嵌套深度超过 3-4 的代码,一周后我无法挖掘自己的程序。所以我的问题是,我什么时候应该知道是时候实现单独的函数而不是嵌套或知道创建对象的时间了。将一个大循环功能分解为多个功能在清晰度和效率方面的得失是什么?在什么时候创建对象变得至关重要,或者只是当我不得不再次重用相同的代码时。

当你唯一的工具是锤子时,一切看起来都像钉子。当我在 MatLab 之后开始学习 python 时,OO 方法给我留下了深刻的印象,以至于我过去常常在各种情况下创建类,无论是否需要。我认为许多 SO 新手会很高兴在这个编程基础上找到一些系统的方法。

4

1 回答 1

1

就个人而言,就循环而言,我的硬截止是三个。如果我遇到了三个嵌套循环(不计算 if/else 条件或 try/catch 条件),那么我知道是时候将其分解为单独的函数了。

就权衡而言,只要您正在运行的函数快速连续运行多次(如在循环的较低层中),就不应该有任何性能损失。进行函数调用总是会有一点点开销,但幸运的是计算机真的很聪明,它们可以调用这些东西temporal caches,其中缓存是一个非常快的内存区域(读取:SRAM)。这将识别您的函数调用并将其加载到缓存中。由于访问缓存中已经存在的内容实际上是免费的(读取时间为几 ​​ns),因此您不会为这些额外的函数调用付出任何性能损失。

但是,类的使用非常依赖于语言。在 javascript 中,一切都已经是一个对象,所以你真的不应该担心在类中包装函数,尽管会有一点开销。然而,对于像 Java 这样的语言,您应该努力创建大量的小类。JVM 对多个类之间的通信进行了极大的优化,并且 JIT 编译器不应加载类中涉及的任何额外“goo”,除非您确实需要它。

不过,总的来说,性能并不是您做出大多数决定的依据(性能非常高 80/20,而您通常需要的只是不做任何明显愚蠢的事情的 80 分。)您真的应该尝试遵循一种模式这使您的代码对其他开发人员尽可能具有可读性。很难定义一个硬性和快速的规则,因为这个主题有很多阵营。不过,总的来说,对于初学者来说,我的建议是查看大量代码并尝试了解正在发生的事情。如果可以,请尝试以更易读的格式重写部分代码。Github 上有足够多的开源代码,应该很容易做到。

良好的编程实践也一直是意见,只是人们有时非常同意。

于 2013-07-10T13:01:41.563 回答