关于语言不可知:参数或参数?

Arguments or parameters?

本问题已经有最佳答案,请猛点这里访问。

我经常发现自己对如何使用"参数"和"参数"这两个术语感到困惑。它们在编程界似乎可以互换使用。

他们使用的正确惯例是什么?


参数是由函数定义为输入的东西,参数是作为参数传递的东西。

1
2
3
void foo(int bar) { ... }

foo(baz);

在本例中,barfoo的参数。baz是传递给foo的参数。


参数是函数声明中的变量:

1
2
3
functionName(parameter) {
    // do something
}

参数是传递给函数的该变量的实际值:

1
functionName(argument);


对于用户1515422,一个非常具体的示例显示了参数和参数之间的区别:

考虑这个函数:

1
2
3
int divide(int numerator, int denominator) {
    return numerator/denominator;
}

它有两个参数:numeratordenominator,在定义时设置。一旦定义,函数的参数是固定的,不会改变。

现在考虑调用该函数:

1
int result = divide(8, 4);

在这种情况下,84是传递给函数的参数。numerator参数设置为参数8的值,denominator设置为4。然后用参数设置为参数值来计算函数。您可以将此过程视为等同于:

1
2
3
4
5
int divide() {
    int numerator = 8;
    int denominator = 4;
    return numerator/denominator;
}

参数和参数之间的差异类似于变量及其值之间的差异。如果我写int x = 5;,变量是x,值是5。可能会出现混淆,因为很自然地会说"x是5",即"变量x的值是5",但希望区别是清楚的。

这能说明问题吗?


当您调用子例程时,参数就是您所拥有的。参数是您在子例程中访问的内容。

1
argle(foo, bar);

foobar是论据。

1
2
3
public static void main(final String[] args) {
    args.length;
}

args是一个参数。


在参数维基百科的文章中有一个关于这个主题的很好的部分。

简而言之——参数是由函数定义的形式名,参数是传递给函数的实际值(如5)或事物(如变量)。


尽管维基百科并非权威来源,但它在解释这些术语方面做得很好。

我想你可以说参数是参数,什么类是对象的实例…


当您定义如下函数时:

1
2
3
MyFunction(param1,param2) {
  print parameter1, parameter
}

定义函数时设置参数。当您这样调用函数时:

1
MyFunction('argument1', 'argument2');

将参数值设置为传递的参数。这些论点就是你在回答问题时提出的。希望有帮助。


在大多数情况下,一个过程需要一些关于调用它的环境的信息。执行重复或共享任务的过程对每个调用使用不同的信息。此信息由变量、常量和表达式组成,调用过程时这些变量、常量和表达式将传递给该过程。

为了将这些信息传递给过程,过程定义了一个参数,调用代码将一个参数传递给该参数。您可以将参数视为停车场,将参数视为汽车。正如不同的汽车可以在不同的时间停放在停车场一样,调用代码每次调用过程时都可以向相同的参数传递不同的参数。

参数

参数表示一个值,当调用该值时,该过程期望传递该值。过程的声明定义了其参数。

定义函数或子过程时,在过程名称后面的括号中指定参数列表。对于每个参数,可以指定名称、数据类型和传递机制(byval或byref)。您还可以指示参数是可选的,这意味着调用代码不必为其传递值。

每个参数的名称用作过程中的局部变量。使用参数名的方式与使用任何其他变量的方式相同。

参数

参数表示调用过程时传递给过程参数的值。调用代码在调用过程时提供参数。

调用函数或子过程时,在过程名称后面的括号中包含参数列表。每个参数对应于列表中相同位置的参数。

与参数定义不同,参数没有名称。每个参数都是一个表达式,可以包含零个或多个变量、常量和文本。计算表达式的数据类型通常应与为相应参数定义的数据类型匹配,并且在任何情况下都必须可转换为参数类型。


只是没有什么大的区别。如果深入研究这个问题,我们可以识别出差异,主要是我们知道参数/参数/签名都是相同的。

基本上,参数定义了我们要传递的数据类型。其中,参数定义了我们要传递的实际数据/变量。

参数示例:

1
2
3
int add(int a,int b){ //Here a and be both can treated as Parameter
 return a+b;
}

参数示例:

1
2
3
4
5
6
int return_result=add(3,4); // Here 3 and 4 both can treated as Argument

or

int x=3,y=4;
int return_result=add(x,y);// Here x and y both can treated as Argument

变量是一个存储位置和一个包含数据、值的相关符号名(标识符)。

参数是传递给函数的变量。

参数是传递给函数的数据(值)。

1
2
3
4
5
6
$variable = 'data/value';

function first($variable){ ... }

function second('data/value'){ ... }
function third(16){ ... }

在函数中,我们首先传递一个参数。

在第二个和第三个函数中,我们传递参数。


把它想象成基本代数。x是您必须填写的参数,您在其中放置的数字是参数。所以如果你有一个像x+2这样的方程,x是你的参数,你为x改变的任何数字都被称为参数。所以,如果用这个方程来补充x,得到1+2。这意味着1是一个参数,提供给x的参数。

同样,如果您有一个类似dosomething("this")的函数,它的定义将是dosomething(字符串参数名称),但"this"将是提供给参数的实际参数,这里名为参数名称。

以最简单的方式来看,参数是参数填充的东西,参数可以是该参数允许的任何数量的东西。

所以参数和参数之间是一个多对一的关系,因为你可以有一个参数,它可以有很多有效的参数,就像上面的x+1方程。x可以是已知的任何数字,它们都是有效的。


实际上,参数和参数都是不同类型的参数。这些是

1)Formal Parameters - variables appear in function/subroutine definitions

例如(在爪哇)

1
public void foo(Integer integer, String... s2)

这里,integer和s2都是形式参数,或者说是松散的参数。

2)Actual parameters or arguments - variables appear in subroutines while calling the

already defined subroutine

例如(在爪哇)假设函数"foo"驻留在对象"testobject"中,

1
testObject.foo(new Integer(1),"test")

所以函数定义中的变量被称为形式参数,或者简单地称为参数和变量,而调用方法被称为实际参数或参数。希望有帮助。