【问题标题】:Regarding Functional Programming Theory关于函数式编程理论
【发布时间】:2013-01-31 07:17:52
【问题描述】:

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

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

【问题讨论】:

    标签: coding-style theory


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      第一种方法更可重用——如果你想做func1 稍后对其他东西所做的任何事情,但你不想在上面做func2func3 怎么办?如果func1 是为了调用第一个场景而编写的,那么你必须去改变一切。

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-20
        • 2017-10-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多