当口头谈论方法时,我从不确定是否应该使用参数或参数或其他词。不管怎样,其他人都知道我的意思,但什么是正确的,这些术语的历史是什么?
我是一名c#程序员,但我也想知道人们是否在不同的语言中使用不同的术语。
声明一下,我是自学的,没有计算机科学的背景。(请不要让我去读《代码完成》,因为我这么做是为了让那些还没有史蒂夫·麦康奈尔这本了不起的书的人受益。)
总结
普遍的共识似乎是,在团队环境中可以互换使用这些术语。除非你在定义精确的术语;然后你也可以使用“正式参数/参数”和“实际参数/参数”来消除歧义。
维基百科上已经有关于这个主题的条目(参见Parameter),其中定义和区分了术语Parameter和argument。简而言之,形参是函数/过程/方法签名的一部分,而实参是在运行时和/或调用时为形参提供的实际值。
维基百科的文章还指出,这两个术语通常是同义词(特别是在非正式地对代码进行推理时):
虽然参数也很常见
称为论点,论点
更恰当的说法是
指定的实际值或引用
参数变量时
子例程在运行时被调用。
给定以下C语言中两个整数相加的示例函数,x和y将被称为它的参数:
int add(int x, int y) {
return x + y;
}
在使用add的调用站点中,例如下面所示的示例,123和456将被引用为调用的参数。
int result = add(123, 456);
此外,一些语言规范(或正式文档)选择专门使用参数或参数,并使用像正式和实际这样的形容词来消除两种情况之间的歧义。例如,C/ c++文档经常将函数形参作为正式实参,将函数调用实参作为实际实参。有关示例,请参阅Visual c++语言参考手册中的“正式和实际参数”。
它们在C语言中的用法没有太大的区别,这两个术语都被使用了
在实践中。
大多数参数通常与函数一起使用。随函数调用语句传递的值称为实参,形参是复制函数定义中的值的变量(称为形式形参)。
int main ()
{
/* local variable definition */
int a = 100;
int b = 200;
int ret;
/* calling a function to get max value */
ret = max(a, b);
printf( "Max value is : %d\n", ret );
return 0;
}
/* function returning the max between two numbers */
int max(int num1, int num2)
{
/* local variable declaration */
int result;
if (num1 > num2)
result = num1;
else
result = num2;
return result;
}
在上面的代码中,num1和num2是形式参数,a和b是实际参数。
在编辑工作中,我经常被人们忘记:结构语言是基于自然语言的。
用英语
“参数”是一个占位符。他们用口语设定回答格式。根据定义,它是呼叫的一方,限制响应。
“论点”是一个正在被考虑的立场。你争论你的观点:你考虑一个论点。
主要区别
论证的主位作用是代理。参数的主题角色是接受者。
的相互作用
把参数看成男性部分,把参数看成女性部分。实参进入形参。
使用
通常在定义中使用参数。实参通常用于调用。
问题
完成这个句子,使它不那么不和谐。
(A)说到定义:
将使用什么参数[]?
参数[]是什么[]?
(B)说到祈祷:
您将使用什么参数,[]?
这个参数[]将是什么[]?
答案
(A)
On /in/against/使用此参数
论点(s)……取
(B)
有什么例子吗
论点(s)……使用/ /反对/
重叠
你可以想象,在回答:在口语中,这些词有时会产生相同的反应!
所以,作为规则:
通常,如果有人想要参数信息,他们想要了解更多关于类型、变量名等的信息。如果你只给出例子论证,他们可能会感到困惑。
通常,如果有人想要参数信息,他们想知道你传递给函数或它的形参的值是什么。
术语参数和参数的使用被滥用了
在程序员甚至作者之间。当处理
方法中,术语参数用于标识中的占位符
方法签名,而术语参数是实际的
您传递给方法的值。
MCSD认证工具包(考试70-483)c#编程,第1版,Wrox, 2013
真实的案例
// Define a method with two parameters
int Sum(int num1, int num2)
{
return num1 + num2;
}
// Call the method using two arguments
var ret = Sum(2, 3);
无需代码的简单解释
“参数”是一个非常一般、广泛的东西,而“参数”是一个非常具体、具体的东西。这可以通过日常生活中的例子来最好地说明:
例1:自动售货机—Money是参数,$2.00是参数
大多数机器接受输入并返回输出。例如,自动售货机把钱作为输入,然后把碳酸饮料作为输出。在这种特殊情况下,它接受一个参数:金钱。
那么论证是什么呢?如果我往机器里放2美元,那么参数是:2美元-这是使用的非常具体的输入。
例2:汽车-汽油是参数
让我们考虑一辆汽车:他们接受汽油(无铅汽油)作为输入。可以说,这些机器接受的参数类型:汽油。这个论证将是我对我的车进行的精确而具体的输入。例:在我的例子中,论点是:40升无铅汽油/汽油。
例3 -详述论证
参数是输入的一个特定的例子。假设我的机器把一个人作为输入,把他们变成一个不撒谎的人。
那么什么是论证呢?这个参数是被放进机器里的那个人。例如,如果把科林·鲍威尔放进机器里,那么辩论就是科林·鲍威尔。
所以参数是一个抽象的概念,但参数总是一个特定的人,有一个特定的名字,被放入机器。这个论点是具体而具体的。
这就是区别。简单。
困惑吗?
请发表评论,我会解释的。
参数和参数
All the different terms that have to do with parameters and arguments
can be confusing. However, if you keep a few simple points in mind,
you will be able to easily handle these terms.
The formal parameters for a function are listed in the function declaration and are used in the body of the function definition. A
formal parameter (of any sort) is a kind of blank or placeholder that
is filled in with something when the function is called.
An argument is something that is used to fill in a formal parameter.
When you write down a function call, the arguments are listed in
parentheses after the function name. When the function call is
executed, the arguments are plugged in for the formal parameters.
The terms call-by-value and call-by-reference refer to the mechanism
that is used in the plugging-in process. In the call-by-value method
only the value of the argument is used. In this call-by-value
mechanism, the formal parameter is a local variable that is
initialized to the value of the corresponding argument. In the
call-by-reference mechanism the argument is a variable and the
entire variable is used. In the call- by-reference mechanism the
argument variable is substituted for the formal parameter so that
any change that is made to the formal parameter is actually made to
the argument variable.
来源:绝对的c++, Walter Savitch
也就是说,
函数的形式形参在函数声明中列出,并在函数定义的主体中使用。形式形参(任何类型的)是一种空白或占位符,在调用函数时用一些东西填充。
实参是用来填充形式形参的。当你写下一个函数调用时,实参会在函数名后面的括号中列出。在执行函数调用时,将插入形式形参的实参。
The terms call-by-value and call-by-reference refer to the mechanism that is used in the plugging-in process. In the call-by-value method only the value of the argument is used. In this call-by-value mechanism, the formal parameter is a local variable that is initialized to the value of the corresponding argument. In the call-by-reference mechanism the argument is a variable and the entire variable is used. In the call- by-reference mechanism the argument variable is substituted for the formal parameter so that any change that is made to the formal parameter is actually made to the argument variable.
我仔细想了想,意识到我之前的答案是错的。这里有一个更好的定义
{想象一盒鸡蛋:一包香肠链接:和一个女佣}这些代表一个函数的元素,需要准备称为:(使用任何名称:假设烹饪是我的函数的名称)。
Maid是一种方法。
(你必须调用或询问这个方法来做早餐)(做早餐的行为是一个叫做烹饪的功能)_
鸡蛋和香肠
(因为你想吃的鸡蛋和香肠的数量是可变的。
你的决定是一个论点:
它表示你正在烹饪的鸡蛋和/或香肠的数量。_
{助记}
“当你打电话给女仆让她做早餐时,她和你争论你应该吃多少鸡蛋和香肠。她担心你的胆固醇__
(然后,参数是你声明并决定传递给你的函数的参数组合的值)
你得回到最基本的问题上来。构造函数和方法都有形参和实参。很多人甚至把构造函数称为特殊的方法。这是一个方法声明参数的使用方式:
type name(parameters){
//body of method
}
这是构造函数声明参数的使用方式:
classname(parameters){
//body
}
现在让我们看一个计算立方体体积的示例代码:
public class cuboid {
double width;
double height;
double depth;
cuboid(double w,double h,double d) {
//Here w,h and d are parameters of constructor
this.width=w;
this.height=h;
this.depth=d;
}
public double volume() {
double v;
v=width*height*depth;
return v;
}
public static void main(String args[]){
cuboid c1=new cuboid(10,20,30);
//Here 10,20 and 30 are arguments of a constructor
double vol;
vol=c1.volume();
System.out.println("Volume is:"+vol);
}
}
现在你明白了,当我们在代码后面的某个地方调用对象的构造函数/方法时,传递的是参数而不是形参。因此,形参仅限于定义逻辑对象的地方,而实参则在实际创建物理对象时发挥作用。
由于我的背景和主要环境是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
参数
形式参数
弃用:正式的参数
对象,该对象声明为函数声明或定义的一部分,在函数的入口处获取值,或者在类函数宏定义中,由紧接在宏名称后面的圆括号括起来的逗号分隔的列表中获取标识符。