• 首页
        • 更多产品

          客户为中心的产品管理工具

          专业的软件研发项目管理工具

          简单易用的团队知识库管理

          可量化的研发效能度量工具

          测试用例维护与计划执行

          以团队为中心的协作沟通

          研发工作流自动化工具

          账号认证与安全管理工具

          Why PingCode
          为什么选择 PingCode ?

          6000+企业信赖之选,为研发团队降本增效

        • 行业解决方案
          先进制造(即将上线)
        • 解决方案1
        • 解决方案2
  • Jira替代方案
目录

为什么大多数编程语言被设计成函数只有一个返回值

大多数编程语言被设计成函数只有一个返回值是因为从本质上说,因为图灵机只有一个返回值(或者说状态)。有一个返回值就能达到图灵完备,不需要两个返回值。

一、为什么大多数编程语言被设计成函数只有一个返回值

大多数编程语言被设计成函数只有一个返回值是因为从本质上说,因为图灵机只有一个返回值(或者说状态)。有一个返回值就能达到图灵完备,不需要两个返回值。

另外,多个返回值就需要多个寄存器,既浪费又不利于编译器优化。从我们的直觉来看,你得到的两个返回值,它们一定能在某个层级上被抽象为一个东西,这在程序中的表现就是返回抽象体的指针(或引用)。

假设我们设计了一个语言叫C-,函数的参数和返回值都只能是一个,那么在C-里,一个多参数多返回值的函数的定义和使用过程就是这样的:struct Para…;//define a parameter struct

struct Ret…;//define a return struct

Ret func(Para p){

    …

}

Para para = XXX;

Ret ret;

ret = func(para);为了使用这个函数,我们需要定义数据结构Para和Ret,是不是很麻烦?如果能去掉会省很多事。好了,那么问题就变成了:为什么编程语言大多去掉了Para而不是Ret?这和函数本身的行为有关。一个函数的行为如下图:<img src=”https://pic1.zhimg.com/50/76bf2b95ddf4be66f08be12f17f01568_720w.jpg?source=1940ef5c” data-rawwidth=”546″ data-rawheight=”101″ class=”origin_image zh-lightbox-thumb” width=”546″ data-original=”https://picx.zhimg.com/76bf2b95ddf4be66f08be12f17f01568_r.jpg?source=1940ef5c”/>大家看出什么问题没?参数可以看做是函数的属性,因为Para这个结构可能只在函数内使用(大多数情况下)。因此,我们为这个函数定义Para结构的行为,其实就是函数定义过程中的一个步骤。既然如此,那么把Para的定义放到函数定义里就好了嘛。把下面的代码:struct Para{

    int a;

    int b;

}

int func(Para p)

…变成:int func(int a, int b)

是不是变得简单清晰易读了?那为什么Ret的结构不放在函数定义中呢?因为Ret是函数的产出,别的地方肯定也要用。一个公用的数据结构放在函数定义里显然不是合理的设计。当然,很多情况下我们也可能会给函数传入一个自己定义的作为参数。不过这大多是因为这个数据结构本来就是要到处用的(比如用结构(x,y)来代表平面上的一个点)。一般而言,我们不会为了表达一个函数的结构,而单独地定义一个数据结构。因此参数结构就内化为了的属性。

延伸阅读:

编程语言选用原则

综合思考软件运行过程中所处的硬件环境

如果在硬件环境中。更新效率相对偏高,一旦硬件环境出现一定转变,将会使计算机编程预算无法快速地和硬件环境相迎合。使得程序编程带来一定影响。所以,程序人员在程序编程的过程中,需要对软件调整内容加以综合思考。并且注重适当地减少软件调整难度。

全面思考平台支撑性

在开展程序编程工作的过程中,应该思考应用平台给编程语言带来的影响,结合编程语言自身特性对应用平台实施科学调整,从而实现工作水平的提升,将编程语言自身作用充分发挥。

思考程序编程实际问题

在进行程序编程的过程中,综合思考上述两个问题时。还要对编程实际情况进行全面思考。所以,在进行计算机编程语言选择的过程中,要求编程人员对编程语言特性有所了解。编程人员在对特殊性软件开发过程中。应该选用较为专业的计算机编程语言.专业性编程语言能够有效提升软件开发的规范性。

一站式研发项目管理平台 PingCode

一站式研发项目管理平台 PingCode

支持敏捷\瀑布、知识库、迭代计划&跟踪、需求、缺陷、测试管理,同时满足非研发团队的流程规划、项目管理和在线办公需要。

相关文章