当口头谈论方法时,我从不确定是否应该使用参数或参数或其他词。不管怎样,其他人都知道我的意思,但什么是正确的,这些术语的历史是什么?

我是一名c#程序员,但我也想知道人们是否在不同的语言中使用不同的术语。

声明一下,我是自学的,没有计算机科学的背景。(请不要让我去读《代码完成》,因为我这么做是为了让那些还没有史蒂夫·麦康奈尔这本了不起的书的人受益。)

总结

普遍的共识似乎是,在团队环境中可以互换使用这些术语。除非你在定义精确的术语;然后你也可以使用“正式参数/参数”和“实际参数/参数”来消除歧义。


当前回答

在参数(计算机编程)-维基百科中有完美的解释

宽泛地说,形参是一种类型,实参是一个实例。

在函数定义f(x) = x*x中,变量x是一个参数;在函数调用f(2)中,值' ' 2是函数的实参。

和参数-维基百科

在计算机编程中,通常使用两种参数的概念,它们被称为参数和实参,或者更正式地称为形式参数和实际参数。

例如,在函数的定义中如

y = f(x) = x + 2,

X是定义函数的形式参数(参数)。

当函数对给定值求值时,例如

F(3):或者,y = F (3) = 3 + 2 = 5,

被定义的函数计算的实际形参(实参);它是一个给定的值(实际值),取代了定义函数的形式参数。(在日常使用中,术语parameter和argument可能会无意中互换,从而被错误地使用。)

其他回答

这是一个关键:价值问题……

参数是键

参数是值

/****************************************/

例子:

名称:“彼得”

/********/

let printName = (name) => console.log(name)

printName(“Peter”)

/********/

在本例中,参数是"name",参数是"Peter"

根据Joseph的Alabahari的书“c# in a Nutshell”(c# 7.0, p. 49):

static void Foo (int x)
{
    x = x + 1; // When you're talking in context of this method x is parameter
    Console.WriteLine (x);
}
static void Main()
{
    Foo (8); // an argument of 8. 
             // When you're talking from the outer scope point of view
}

在一些人类语言(如意大利语、俄语)中,这些术语的同义词被广泛使用。

参数=形式参数 参数=实际参数

在我的大学里,教授们两种名字都用。

这些术语在某种程度上是可以互换的。其他答案中描述的区别用术语形式形参表示函数体中使用的名称,用术语形参表示调用站点提供的值(形式实参和实参也很常见)更为恰当。

还要注意的是,在数学中,参数(argument)这个词更常见,而参数(parameter)通常意味着完全不同的东西(尽管参数方程中的参数本质上是两个或多个函数的参数)。

我对这些答案还是不满意。他们都开始谈论“函数声明”,我的猴子大脑已经走神了,开始思考独角兽。这根本不能帮助我记住,这只是定义。

我想要一些我可以立即并且永远记在脑子里的东西。

我很快就能理解的唯一答案是:

参数是传入的实际值。

参数更容易定义,只要你知道它们是什么,你就知道参数是另一个。

另一种思考方式是

参数是函数之外的变量 参数是函数内部的变量

简化为:

参数在外面,参数在里面

如果有人不同意我的观点,你可以把你的论点放在外面,把你的参数带进来;)

由于我的背景和主要环境是C语言,我将从实际的C标准和一本重要的参考书中提供一些关于这个主题的陈述/引用,这本书也是C语言的一个开发人员写的,它经常被引用,通常被视为C语言的第一个非官方标准:


C编程语言(第二版),作者Brian W. Kernighan和Dennis M. Ritchie(1988年4月):

第25页,第1.7节-功能 在函数定义中,我们通常将在括号内列表中命名的变量使用形参,将在函数调用中使用的值使用形参。术语形式论证和实际论证有时用于同样的区别。

ISO/IEC 9899:2018 (C18):

3.3 论点 实际参数 DEPRECATED:实际参数 函数调用表达式中以圆括号为界的逗号分隔列表中的表达式,或者类函数宏调用中以圆括号为界的逗号分隔列表中的预处理令牌序列。


3.16 参数 形式参数 弃用:正式的参数 对象,该对象声明为函数声明或定义的一部分,在函数的入口处获取值,或者在类函数宏定义中,由紧接在宏名称后面的圆括号括起来的逗号分隔的列表中获取标识符。