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
您所指的文本是正确的,更改局部变量被视为副作用.
它并不是说这是一件坏事.它不是函数式编程.在纯函数式编程语言中,您将以递归方式编写循环,从而无需更改变量.
像这样编写函数(没有可观察到的副作用)是任何语言的优秀实践,它不是函数式编程.
编辑:现在我看到你关于"坏"副作用的评论.我不会说副作用很糟糕.在大多数主流语言中,没有它们很难编程,我认为很多程序员都会考虑副作用.但是在大型软件项目中,过分依赖副作用可能会让你的生活变得非常悲惨.这是一个很好的例子,涉及单身人士(导致副作用的最终方式)
在一种禁止副作用的语言中,作为程序员,您和编译器的惊喜都会少一些.纯函数代码更容易分析和并行化,并且至少在理论上,编译器更容易优化.