是否有任何编程语言提供命名函数返回值的功能?

问题描述 投票:0回答:2

在编程时,我经常发现有必要记录函数返回的值。在 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)

我并不认为这是某种突破性的想法,但它似乎普遍有用,而且令我惊讶的是我从未见过这个概念在任何编程语言中实现。

您能说出任何一种具有这种返回值语义命名的编程语言吗?

return-value programming-languages naming-conventions
2个回答
1
投票

例如,在 APL 中,函数的结果被声明为变量。您示例中的函数声明可以写成

exitCode ← base exponent power

在 APL 中。但是,没有副作用的函数应始终以其返回的结果命名。如果函数可能失败,我将使用一个在成功时永远不会返回的值,例如本例中的 -1。


0
投票

Golang 将此功能称为 命名返回值(来自 A Tour of Go)。

Golang 中函数声明的示例:

func exponent(base int, power int) (exitCode int)
{
    exitCode = int(math.Pow(float64(base), float64(power)))
    return
}

exitCode := exponent(5, 5)

另请参阅这个问题

© www.soinside.com 2019 - 2024. All rights reserved.