在编程时,我经常发现有必要记录函数返回的值。在 Java/Scala 世界中,您经常使用函数上方的注释来执行此操作。
但是,与函数参数在所有语言中获得的一流文档相比,这可能会脱颖而出。例如:
def exponent(base: Int, power: Int): Int
这里我们有一个方法的签名,该方法将
base
进行 power
次幂并返回... 可能是该计算的结果?我确定它返回一个Int
,并且推断似乎非常合理,返回值确实是计算base ^ power
的结果,但在我编写和阅读的许多函数中,不可能推断出返回值的语义非常容易,您需要研究文档和/或实际使用方法来找出答案。
这让我想知道,是否有任何语言支持选择性地声明返回值的语义名称?
def exponent(base: Int, power: Int): Int(exitCode)
啊哈哈!结果这个函数实际上返回操作是成功还是失败的指示!看方法签名就很清楚了!当我调用这个方法时,我的IDE还可以智能地创建一个同名的变量,la:
// Typing in IntelliJ
exponent(5, 5)<TAB>
// Autocompletes to:
val exitCode = exponent(5, 5)
我并不认为这是某种突破性的想法,但它似乎普遍有用,而且令我惊讶的是我从未见过这个概念在任何编程语言中实现。
您能说出任何一种有具有这种返回值语义命名的编程语言吗?
例如,在 APL 中,函数的结果被声明为变量。您示例中的函数声明可以写成
exitCode ← base exponent power
在 APL 中。但是,没有副作用的函数应始终以其返回的结果命名。如果函数可能失败,我将使用一个在成功时永远不会返回的值,例如本例中的 -1。