正确选择循环与功能与对象/类

时间:2013-07-10 12:53:06

标签: language-agnostic coding-style

在编写程序时,我作为业余爱好者程序员的理解是,有三种方法可以完成大部分工作:

  • 创建循环
  • 创建和使用功能
  • 创建并使用对象

我在这里使用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;
}

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

当你拥有的唯一工具是锤子时,一切看起来像钉子。当我在MatLab之后开始学习python时,我对OO方法印象深刻,我曾经在各种情况下创建类,无论是否需要。我想很多SO新手都很乐意在这个编程基础上找到一些系统的方法。

1 个答案:

答案 0 :(得分:1)

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

就权衡而言,只要您运行的函数快速连续运行多次(如循环的较低层),就不会有任何性能损失。进行函数调用总是会产生轻微的开销,但幸运的是,计算机非常智能,并且他们会调用temporal caches,其中缓存是快速内存的区域(读取: SRAM)。这将识别并将您的函数调用加载到缓存中。由于访问缓存中已有的内容实际上是免费的(读取时间为几纳秒),因此您不会为这些额外的函数调用支付任何性能损失。

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

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

同样优秀的编程习惯一直是意见,只是人们有时会非常同意。

相关问题