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

开发者社区> 问答> 正文

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

a123456678 2016-06-06 19:33:30 1406

我看了很多语言源代码,突然发现一个有趣的现象,对于function这个关键字,很多语言设计出来了,而很多语言却没有。这是基于一种什么考虑呢?

而且经过我的统计,出现function关键字的大多数是脚本语言,比如php,js等等,而编译式语言比如java,c等等,往往却没有用到这个关键字,这其中有什么内在联系吗?

JavaScript Java PHP
分享到
取消 提交回答
全部回答(1)
  • a123456678
    2019-07-17 19:29:18

    很赞的一个问题。

    我也看过很多语言源代码,也对不同的语言的语法感兴趣,所以简单的聊聊这个问题。

    首先出场的是 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编译器要求的数据和代码分离的原则。

    而现在的主要动态编程语言都不再需要编译,更无需预编译。

    0 0
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

推荐文章
相似问题
推荐课程