在我和 Igor Wojda 合作编写 Android Development with Kotlin 这本图书的过程中,对我们而言最大的挑战之一就是学习并完全理解技术术语。当然,人们在每天的交流中都使用这些术语,但是通常并不在意是否正确地使用这些术语。典型的范例就是 argument 和 parameter 之间的差别。人们常常交替使用这两者,但是它们实际代表的是两样不同的东西。同样,人们常说的 lambda 表达式 ,其实它们真正的意思是任意一个 字面意义的函数(function literal)。我们必须把这些词汇提取出来并且准确地理解它们真正的含义。这比我想象的要难得多。这就是为什么我决定将我所学到的知识写成一系列文章,让其他人能够更容易地理解这些术语。
Parameter vs Argument, Type parameter vs Type argument
Parameter 和 argument 很容易混淆,但是它们是两个完全不同的概念。我们一起来看一看它们的含义以及两者的区别。我们还将弄明白 type parameter 和 type argument。
Parameter vs Argument
Parameter 是在函数声明中定义的变量,而 argument 是在调用这个函数时真实传递的值。为了理解这一区别,我们来看一个示例函数以及它的使用:
fun randomString(length: Int): String {
// ....
}
randomString(10)
在这个例子中,length
是一个 parameter, 10
(在函数调用中使用)是一个 argument。一般的定义是:
Parameter 是在函数声明中定义的变量。Argument 是在调用函数时,这个变量的真实值。
对话实例:
-
randomString
函数抛出了一个错误。你给length
parameter 传递了什么 argument ? -1
- 这就是出错的原因。
randomString
还不支持length
parameter 的值为负数。
Type parameter vs Type argument
parameter 和 argument 之间的区别是通用的,适用于所有类型的函数:方法,构造函数等。它同样适用于泛型。我们一起来看一个泛型类的实例:
class Box<T>
val a: Box<Int> = Box()
这里 Box
是一个泛型类,它定义了一个 type parameter T
,在实际使用中,我们指定了 Int
作为 type argument(这篇文章说明了为什么是类型而不是类)。一般的定义是这样的:
Type parameter 是在泛型中定义的类型占位符,Type argument 是参数化泛型时使用的真实类型。
本文译自 :
Kotlin programmer dictionary
Programmer dictionary: Parameter vs Argument, Type parameter vs Type argument