2016-09-19 89 views
0

说你必须在C++/java中编写一个SW代码,你可以选择使用以下两种方法中的哪一种来实现大部分功能?无功能的无效功能与ARG的功能跟不上的功能

void function(){ 
    //code which uses private/public class variables 
    //it modifies directly variable outside of the function 
} 

xyztype function(a,b,c,d){ 
    //code which uses local variables and args 
    xyztype xyz; 
    return xyz; 
} 

我的问题是在以下方面:

1. Performance 
2. Good practice in terms of perfomance 

我不关心可读性/可用性或任何类似。 在学校我们习惯了第二种方式,但现在我倾向于使用第一种方法的9/10倍。 显然局部变量更快,但如果我有40个函数作用于5个变量呢?在本地清除所有内容可能会适得其反。

+0

我知道Java社区没有人认为这对普通代码具有相关的性能影响。可能会对经常调用并且性能至关重要的代码产生影响,但最佳做法认为应在编程之后进行此类优化,并发现测量带来的瓶颈。您始终可以使用第一种方式编写Java代码,但Java社区的大多数成员会认为它会有异味,尤其是在您为其公开该字段的情况下。 – mm759

回答

0

性能并不总是首先要处理的(尽管代码不是性能至关重要的)。 对于严肃的项目,您希望您的代码清晰明了,并遵循特定的范例,以便将来的开发变得轻松。
访问全局变量的函数用于过程编程范例(如pascale,assembly ...),稍后添加一些代码将非常困难,如果遵循该方法,这就是为什么建议使用面向对象编程。

过程是一个没有返回值的函数,所以这就是你正在谈论的。

而关于传递参数,你真的不想让一个函数接取全局变量的原因有很多:

  • 你想编写一个函数一次和端口后来到其他项目中,全球变量有不同的名字。
  • 你想要一个函数调用,然后是一个变量列表,让你知道当你想做一些改变时函数的作用。

    考虑这个例子,为了旋转一个段,有两种可能性,在平面上的一个点上旋转它,或者旋转它的中心,但是使用该方法的两个函数调用看起来像这样'roate_line()' 所以你不能猜测这个案子。

  • 另一个原因是您可以使用该函数仅对特定变量集应用更改,并且您的代码不会是动态的,您实际上必须为每组变量应用相同的实现函数类型的治疗,(10用于旋转10段!!!)

可是谈到性能,传递参数是通过堆完成的,每个传递的参数需要推入和弹出指令和存储器访问,以便基本上慢一点(基于堆栈的计算机 - 像大多数现代计算机 - 实际上非常快),所以你不会真正注意到这种差异,并指出许多程序员修复了问题通过传递结构的指针,以便只传递一个变量(地址)而不是整个结构