关于功能编程理论

时间:2013-01-31 07:17:53

标签: coding-style theory

这两种编程方法之间是否存在偏好共识?你可以向我解释一下为什么,在专业规模上,为你所选择的范例。

(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++
} 

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

第一种方法更具有可重用性 - 如果你想做func1以后对其他事情做的事情会怎样,但你不想做func2和{{1 }} 在上面?如果编写func3来调用第一个场景的那些,那么你必须去改变一切。

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

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