晴明的博客园 GitHub      CodePen      CodeWars     

[cs] 编程术语鉴别

function vs method

函数(function)和方法(method)在编程中的概念就很相近,经常被互换着称呼,
但它们的区别主要是在定义的位置上。

    function是一段通过名字调用的代码,它可以接受数据进行操作,并可能会有返回值。
    method是一段通过关联在对象上的名字调用的代码。

从这段解释上看函数和方法基本一致,只是方法是属于对象的一部分,
所以在面向对象语言中才有概念。如果是C语句,就只有函数的说法。

方法是附属于对象的,相对于函数可以接受传入参数,
对象本身也会作为隐性参数可以在方法中被调用。
在返回值方面,方法不仅可以选择返回数据,还可以将数据赋予其所属的对象。

parameter vs argument

parameter和argument都被翻译成“参数”,它们也经常被混淆。
其实很好更精准的翻译应该是“形参(formal parameter)”和“实参(actual argument)”。

    parameters是定义函数时定义的那些变量,它们是函数类型识别(type signature)的一部分;
    arguments是调用函数时传入到函数中的那些变量,它们是函数的输入值。

这称为也是相对的,比如说下边的例子:

    void foo(int x, int y) {
        bar(x, y);
    }

x和y对于foo函数来说是形参(parameter),而对于bar来说是实参(argument)。
因此也可以说argument是parameter的实例。

declaration vs definition

申明(declaration)和定义(definition)这两个概念应该缘起于C/C++,
因为写C/C++程序会分头文件(header files)和实现文件(implementation files)。
方法和变量的申明部分一般放在头文件,定义部分则在实现文件里。

所以很容易理解

    declaration是描述变量、方法、类的类型标识,它没有具体的实现;
	编译器看到申明部分不会分配内存,而是从其它地方找到其实现的定义。
    definition是真正实例化变量,实现方法和类。
	编译器看到定义部分时就知道如何分配内存,在运行时分配相应大小内存去存放内容。

比如下边这些代码都属于申明:

    extern int bar;
    extern int g(int, int);
    double f(int, double); // extern can be omitted for function declarations
    class foo; // no extern allowed for type declarations

而下边的代码是对上述“申明”的具体“定义”:

    int bar;
    int g(int lhs, int rhs) {return lhs*rhs;}
    double f(int i, double d) {return i+d;}
    class foo {};

不严格的说“定义”也包含了“申明”的部分,应该单看定义中变量,方法和类的名字部分,
那些可以算是“申明”。

posted @ 2016-11-18 14:36  晴明桑  阅读(229)  评论(0编辑  收藏  举报