为什么如此多的编程语言使得函数可以修改作为参数传递给它的对象,而无需某种语法来让调用者清楚地了解这一点。例如考虑:
SomeObject A(15), B
B = DoSomething(A)
print(A + " " + B + "\n)
阅读该代码,您会期望输出类似于“15 75”,即 A 是您构造它的结果。然而,大多数语言都允许 DoSomething 更改 A 的值。在 C++ 中,您可以通过查看 DoSomething 的声明来判断其是否可能,例如通过查看参数是否定义为非常量引用。然而,在许多语言中,例如 Python,如果不通读函数代码以确保它永远不会改变,就没有办法判断 A。
我已经被这个问题困扰过几次,特别是当尝试使用其他人的代码时,这些代码使用了这种行为,并且通常会导致逐行检查整个代码段以尝试找到正在更改参数的内容。 .
为什么语言通常不需要一些显式的语法来调用“是的,这个对象可以修改”,例如“B = DoSomething(inout A)”?
除了“永远不要修改传递给函数的参数”之外,是否有任何编码标准可以帮助防止问题发生?
最佳答案
如果你看看Java,方法并不能真正改变参数(Java只有输入参数)。但参数通常只是对某个要使用的对象的引用,这意味着该方法可以以任何可能的方式更改该对象。这使得推理语义(不查看文档)变得困难,与函数编程完全相反。
你说得对,这是不可取的,但在短期内它让事情变得更容易。不幸的是,大多数情况下,重要的是短期,因此我们仍在使用支持隐藏副作用的语言......
关于programming-languages - 明确函数可以修改其参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1141826/