0

这两种编程方法之间是否存在偏好共识?你能否向我解释一下为什么,从利弊的角度来看,你选择的范式。

(i) 一个程序具有三个需要在某些输入上执行的功能。它运行第一个,获取返回的变量,使用该变量运行第二个,然后对第三个执行相同的操作。最后打印第三个返回的变量。

func1(){ return f1 }
func2(){ return f2 }
func3(){ return f3 }
main(){
fin=# of inputs
i=0
while i<fin
   first=func1(in[i])
   sec=func2(first)
   third=func3(sec)
   print(third)
   i++
}  

(ii) 程序逐步执行一系列指令,首先从主函数推送第一张多米诺骨牌。

func1(){ func2(newfrom1) }
func2(){ func3(newfrom2) }
func3(){ print(newfrom3) }
main(){
fin=# of inputs
i=0
while i<fin
   func1(in[i])
   i++
} 
4

2 回答 2

0

我看到的唯一区别是版本 2 使用变量来存储中间结果。
所以从性能的角度来看,应该没有任何区别,因为编译器会将这些中间结果存储在寄存器中的两个版本中。但这可以通过分析来检查。
但对我来说,版本 1 更具可读性,因此更好。

于 2013-01-31T09:13:14.127 回答
0

第一种方法更可重用——如果你想在func1以后对其他事情做任何事情,但你又不想做,怎么func2func3?如果func1被编写为第一个场景调用这些,那么你必须去改变一切。

我的偏好是尝试识别对单个函数有意义的“操作”,编写一个函数来执行此操作,然后为更复杂的事情编写另一个函数,该函数调用几个较小的函数来实现其目的。然后经常会发现其中一些较小的功能在以后的其他地方可以使用。

是的,这给我留下了更多的函数调用,可能还有更多的临时存储被使用,但我让编译器担心——如果它被证明是一个性能问题,我会处理它。通常,性能会受到其他因素的影响。

于 2013-01-31T09:21:00.597 回答