为何有的语言要声明function关键字有的却不需要呢? -问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

为何有的语言要声明function关键字有的却不需要呢?

我看了很多语言源代码,突然发现一个有趣的现象,对于function这个关键字,很多语言设计出来了,而很多语言却没有。这是基于一种什么考虑呢?
而且经过我的统计,出现function关键字的大多数是脚本语言,比如php,js等等,而编译式语言比如java,c等等,往往却没有用到这个关键字,这其中有什么内在联系吗?

展开
收起
蛮大人123 2016-02-29 16:30:54 2608 0
1 条回答
写回答
取消 提交回答
  • 我说我不帅他们就打我,还说我虚伪

    很赞的一个问题。
    我也看过很多语言源代码,也对不同的语言的语法感兴趣,所以简单的聊聊这个问题。
    首先出场的是 LISP 语言。 LISP 语言以逼格高闻名于世。他属于函数式编程语言,所有的语句都是函数,因此不需要 function 这个关键词。
    随后的 Fortran 语言,公式翻译的意思 FormulaTranslation。既然是公式翻译语言,因此 数学公式 f(x) = a + b 在 Fortran 的调用就是 x = a + b。
    在定义函数的方式上,使用 function:(代码来自google)
    function add(a, b)
    implicit none
    real::a, b !声明函数参数类型,这是必需的
    real::add !声明函数返回值类型,这是必需的
    add = a + b !返回值的表达式
    return
    end
    COBOL语言。COBOL 设计的目的和 Fortran 不同,甚至连赋值语句都没有,而且根本就没有函数的概念,取而代之的是 PROCEDURE DIVISION(过程)。
    随后就是 Basic:Beginner's All-purpose Symbolic Instruction Code。Basic 可谓是集大成者,不仅仅有函数,还有过程。函数使用 function, 过程使用 sub。(抄袭 fortran 和 cobol?)
    C语言改变了这种局面,原因是C语言的一个独辟蹊径的设计理念:函数如何调用,就如何声明。也就是说,我们如果这样调用函数
    sum = f(a, b);
    那么,我们就这么声明:
    double f(a, b) / 旧式语法 /

    double a;
    double b;

    {}
    double f(double a, double b) // 新式语法
    {}
    随后的 C++ Java C# 走的是C的路线。
    但是调用和声明一致的前提是,函数调用之前需要声明。在 C 语言中,不仅仅是函数,即使数据类型定义也需要声明。
    不过在很多动态语言中,大部分数据和函数都不需要提前声明,而且有很多函数只调用一次,那么在函数调用之前声明一次,以后这个函数就再不使用了,这样就会显得繁琐。这时,就需要在语法上将函数定义和函数调用分别出来。
    还有一个原因,C是种编译性的语言,他的语法是为了更好的提升编译速度和编译完成后的代码性能,比如早期C和pascal编译器要求的数据和代码分离的原则。
    而现在的主要动态编程语言都不再需要编译,更无需预编译。

    2019-07-17 18:50:31
    赞同 展开评论 打赏
问答分类:
问答地址:
相关产品:
问答排行榜
最热
最新
推荐文章
更多
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载