功能编程:副作用

bla*_*ned 7 functional-programming

大多数教程/文章/书籍在介绍函数式编程时都会讨论副作用.拿这个Python代码:

def isPrime(n):
    k = 2
    while k < n:
        if n % k == 0:
            return False
        k += 1
    return True
Run Code Online (Sandbox Code Playgroud)

文中说上面的功能有局部副作用,我不明白.我看到变量"k"正在发生变化,我不明白它有什么不好.

有人可以给出一个明显的不良副作用的例子,以及如何通过函数式编程来避免它?

小智 16

您所指的文本是正确的,更改局部变量被视为副作用.

它并不是说这是一件坏事.它不是函数式编程.在纯函数式编程语言中,您将以递归方式编写循环,从而无需更改变量.

像这样编写函数(没有可观察到的副作用)是任何语言的优秀实践,它不是函数式编程.

编辑:现在我看到你关于"坏"副作用的评论.我不会说副作用很糟糕.在大多数主流语言中,没有它们很难编程,我认为很多程序员都会考虑副作用.但是在大型软件项目中,过分依赖副作用可能会让你的生活变得非常悲惨.这是一个很好的例子,涉及单身人士(导致副作用的最终方式)

在一种禁止副作用的语言中,作为程序员,您和编译器的惊喜都会少一些.纯函数代码更容易分析和并行化,并且至少在理论上,编译器更容易优化.