• 首页
        • 更多产品

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

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

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

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

          测试用例维护与计划执行

          以团队为中心的协作沟通

          研发工作流自动化工具

          账号认证与安全管理工具

          Why PingCode
          为什么选择 PingCode ?

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

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

编程语言中的循环体为什么不设计成函数调用

编程语言中的循环体不设计成函数调用是因为for就是更加倾向于函数式范式的语义。对于大多数高级语言,已经有类似于foreach,map,for in,for of等等函数式的隐含迭代器的语法。

一、编程语言中的循环体不设计成函数调用的原因

for就是更加倾向于函数式范式的语义。对于大多数高级语言,已经有类似于foreach,map,for in,for of等等函数式的隐含迭代器的语法。只有在c/c++这种类似的过程式的编程范式中,for更显式的代表for-loop,实际上,对于c语言系统中,这种for-loop语法并不自然,远远没有while-loop来的自然,并且也不是必须,可以说没有for循环的c语言丝毫不影响其表达能力。所以真相是,for-loop在c语言的地位是为了实现类似函数式for-iterator语法中的一种近似;我们考察在c语言中的一个典型的for-loop结构:int i;

for(i = 0; i < n; i++)

{

do_something(i);

/*some implement here*/

}由于for-iterator的语义在结构化的编程语言首先选用循环来实现(递归也可以等价),而loop必须依赖于起始状态,结束条件,为了使迭代的处理可以放在同一个代码块里(便于封装),因此状态改变也实现在每次循环之后。我们稍微封装一下:void for_each(int array[],int count,void (*handle)(int array[],int i))

{

    int i = 0;

    for(i = 0; i < n; i++)

    {

        handle(array,i);

    }

}

int a[]={1,2,3,4,5,6,7};

void print(int array[],int index)

{

    printf(“%d\n”,array[index]);

}

for_each(a,sizeof(a)/sizeof(a[0]),print);可以看出for-loop在c语言的实现,依赖外部状态变化,也就是副作用;副作用必须封装起来才能尽可能避免对系统的其他方面造成影响,于是for-loop用了一个语句分别表达了,初始化,结束条件,和迭代这三个东西—-这使得for-loop在c语言的实现非常不自然。事实上,for在c语言中往往也因为其奇怪的语法定义,用于实现非迭代式的很多循环功能

延伸阅读:

二、编程语言选用原则

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

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

全面思考平台支撑性

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

思考程序编程实际问题

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

相关文章