为什么大多数编程语言只从一个函数返回一个值?

日期:2018-06-19 浏览:8

这个问答是每周发布的一系列帖子的一部分,这些帖子强调了技术爱好者遇到的常见问题,并由100多个问答站点组成的免费社区网络Stack Exchange的用户回答。M4N问:

为什么大多数(?)编程语言被设计成支持任意数量的输入参数,但只支持一个返回值?

在大多数语言中,可以解决这个限制,例如使用外部参数、返回指针或定义/返回结构/类。但奇怪的是,编程语言并不是以更自然的方式支持多个返回值。

对此有什么解释吗?

请参阅此处的原始问题。

其mathTelastyn答案( 37票) :

因为函数是执行计算并返回结果的数学构造。的确,不少编程语言的大部分内容都只关注一个输入和一个输出,多个输入是输入周围的一个薄包装。

这并没有改变,因为程序员发现参数是笨拙的结构,只在有限的一组场景中有用。和许多其他事情一样,支持是不存在的,因为需要/需求是不存在的。

相关: 为什么老的编程语言继续被修改?

想想数据结构Steve Evers的回答( 23票) :

在数学中,定义良好的函数是一个给定输入只有一个输出的函数(顺便说一句,你只能有一个输入函数,而且在语义上仍然可以用curring得到多个输入)。

对于多值函数(例如正整数的平方根),返回值的集合或序列就足够了。

对于您所说的函数类型(即。返回多个不同类型的值的函数)我对它的看法与您看起来略有不同:我认为out params的需要/使用是为了更好的设计或更有用的数据结构的解决方法。例如,我更喜欢if *。胰蛋白酶(...)方法返回一个可能是monad,而不是使用out参数。想想F # :

中的这段代码,让s = 1 将胰蛋白酶与|一些( I ) - >匹配/ /用I | None - - >做任何事情/ /无法解析编译器/ IDE /分析支持对这些构造非常有用。这将解决大部分外出参数的需要。老实说,我想不出有什么其他方法可以解决这个问题。

对于其他场景(我不记得了),一个简单的元组就足够了。

说我的语言blueraja - Danny Pflughoeft回答( 17票) :

有些语言,如Python,在本地支持多个返回值,而有些语言,如C . 9376,则通过它们的基库支持它们。

但是一般来说,即使在支持它们的语言中,也不会经常使用多个返回值,因为它们很草率:

返回多个值的函数很难清晰命名。返回值的顺序容易出错。(密码、用户名) = GetUsernameAndPassword ( ) (出于同样的原因,许多人避免函数的参数太多;甚至有人甚至说一个函数永远不应该有两个相同类型的参数!) OOP语言已经有了对多个返回值的更好替代方案:类。它们的类型更强,它们将返回值分组为一个逻辑单元,并且在所有使用中保持返回值的名称(属性)一致。它们非常方便的地方是在语言(如Python )中,其中一个函数的多个返回值可以用作另一个函数的多个输入参数。但是,这是一个比使用类更好的设计的用例非常少。

找到更多答案,或者把自己的答案留在原来的帖子里。在程序员处看到更多这样的问答,这是对软件开发概念问题感兴趣的专业程序员的问答网站。如果您有自己的编程问题需要解决,请登录程序员并提出问题(免费)。