[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 {};
不严格的说“定义”也包含了“申明”的部分,应该单看定义中变量,方法和类的名字部分,
那些可以算是“申明”。