【问题标题】:What's the difference between an argument and a parameter?参数和参数有什么区别?
【发布时间】:2010-09-14 11:32:00
【问题描述】:

当口头谈论方法时,我从来不知道是用argument还是parameter这个词还是别的什么。无论哪种方式,其他人都知道我的意思,但什么是正确的,这些术语的历史是什么?

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

郑重声明,我是自学的,没有计算机科学背景。 (请不要告诉我阅读Code Complete,因为我问这个是为了其他还没有Steve McConnell 的奇妙书籍的人的利益。)

总结

普遍的共识似乎是在团队环境中可以互换使用这些术语。除非您定义精确的术语;那么你也可以使用“formalargument/parameter”和“actualargument/parameter”来消除歧义。

【问题讨论】:

  • 我可以互换使用它们.. 还没有人嘲笑我.. '这个函数有 4 个参数.. 这个函数有 4 个参数。'听起来一样。
  • 可以互换使用它们,除非您试图描述参数如何工作以及如何传递参数等。此时精确的术语(有时可能很难表达)很有用.
  • 这个问题至少有两个非封闭的、与语言无关的版本:stackoverflow.com/questions/3176310/…stackoverflow.com/questions/427653/arguments-or-parameters。这个问题还有另一个 C# 版本;我已请求合并。
  • 很高兴您提到了史蒂夫·麦康奈尔。我认识了另外一个人,他和 Robert C. Martin 一起了解软件工艺。
  • 我觉得不管你是否在正式的环境中,你都应该努力使用正确的术语。我认为它很简单。当你调用一个方法时,你传入了参数。定义方法时,您正在定义将从方法/函数调用中获取参数的参数。参数 - 与函数关联并确定函数值的自变量。参数 - 定义特定流程或活动范围的限制或边界。

标签: parameters language-agnostic arguments terminology


【解决方案1】:

参数是方法定义中的变量。调用方法时,参数是您传递给方法参数的数据。

public void MyMethod(string myParam) { }

...

string myArg1 = "this is my argument";
myClass.MyMethod(myArg1);

【讨论】:

  • 一个可能有帮助的头韵助记符:参数是实际的。 ;)
  • 答案提到“参数是方法定义中的变量”但最好说“方法声明”[如果有人在“声明”和“定义”之间进行区分]
  • “你定义参数,然后你做参数。”
  • parameter => 当我们定义函数时,argument => 当我们调用该方法时。 (如果我错了,请纠正我。)
  • 参数是名称。参数就是值。
【解决方案2】:

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

参数是传递给函数的这个变量的实际值。

【讨论】:

  • 这些语言通常将传递给方法的参数/参数列表称为*argsARGV 而不是*params :-)
  • *params 将是一个变量的名称,用于保存参数名称(可能用于自省)。
  • @karatedog 实际上,这完全符合这种区别。参数在声明时命名,参数仅在调用时才知道。语法*args 声明了一个参数 args,其值为参数 的列表(名称和类型在声明时已知)(其编号仅在调用时已知时间)。
【解决方案3】:

简单:

  • PARAMETER → PLACEHOLDER(表示占位符属于函数命名,在函数体中使用)
  • ARGUMENT → ACTUAL VALUE(这表示由函数调用传递的实际值)

【讨论】:

  • 不错的内存挂钩
【解决方案4】:

已经有一个关于该主题的 Wikipedia 条目(参见 Parameter)定义和区分术语 parameterargument。简而言之,参数是函数/过程/方法签名的一部分,参数是在运行时和/或参数调用站点提供的实际值。

维基百科的文章还指出,这两个术语经常同义使用(尤其是在非正式地推理代码时):

虽然参数也很常用 称为论据,论据 更恰当地认为是 分配的实际值或参考 到参数变量时 子程序在运行时被调用。

鉴于以下 C 中将两个整数相加的示例函数,xy 将被称为其参数:

int add(int x, int y) {
    return x + y;
}

在使用add 的呼叫站点,例如下面显示的示例,123456 将被称为 参数 通话。

int result = add(123, 456);

此外,一些语言规范(或正式文档)选择专门使用 parameterargument 并使用诸如 formal 之类的形容词实际 而不是消除两种情况之间的歧义。例如,C/C++ 文档通常将函数 parameters 称为 formal arguments,将函数调用 arguments 称为 actual arguments .例如,请参阅Visual C++ Language Reference 中的“Formal and Actual Arguments”。

【讨论】:

  • +1 用于解释它们的常用用法以及它们的正式定义,并提及“正式”和“实际”参数/参数的常用用法,以明确区分它们。跨度>
  • 这是一个很好的解释,但与概念的简单性相比,它几乎是不可能理解的。参数是被接受的,参数是被调用的。这是一条单行道。
  • @ihodonald 这听起来不太对劲。参数是接受的内容,参数是进行调用时提供的内容。但是参数接受一个参数,所以它是一个被接受的参数,而不是一个参数。如果有的话,参数是在对参数的调用中给出的(或者至少是一些带参数的函数),所以调用的参数更多的是参数而不是参数。
【解决方案5】:

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

Argument 是传递给函数的这个变量的实际值。

【讨论】:

    【解决方案6】:

    参数是调用函数时必须填写的内容。你放进去的是论据。

    简单设置:实参进入形参,实参就是形参的值。

    更多信息: http://en.wikipedia.org/wiki/Parameter_(computer_science)#Parameters_and_arguments

    【讨论】:

      【解决方案7】:

      术语参数和参数的使用被误用 有点在程序员甚至作者之间。处理的时候 方法中,术语参数用于标识 方法签名,而术语 arguments 是实际的 传递给方法的值。

      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);
      

      【讨论】:

        【解决方案8】:

        假设您是一家航空公司。你造一架飞机。你在里面安装座位。然后,您将飞机装满乘客并将其发送到某个地方。乘客(或者更确切地说,一些时空改变的版本)下船。第二天,您再次使用同一架飞机和相同的座位,但这次乘坐的是不同的乘客。

        飞机是你的职责。

        参数是座位。

        争论的是坐在那些座位上的乘客。

        function fly(seat1, seat2) {
            seat1.sayMyName();
            // Estraven
            seat2.sayMyName();
        
            etc.
        }
        
        var passenger1 = "Estraven";
        var passenger2 = "Genly Ai";
        
        fly(passenger1, passenger2); 
        

        【讨论】:

          【解决方案9】:

          在编辑过程中,我经常对人们忘记的方式感到厌烦:结构语言是基于自然语言的。

          英文

          “参数”是一个占位符。他们用口语设置响应格式。根据定义,它是调用方,限制响应。

          “论据”是正在考虑的立场。你争论你的观点:你考虑一个论点。

          主要区别

          论点的主题角色是代理。参数的主题角色是接受者。

          互动

          将参数视为男性部分,使参数成为女性部分。参数进入参数。

          用法

          参数通常在定义中使用。参数通常在调用中使用。

          问题

          完成句子以减少不和谐。

          (A) 说到定义:

          1. 将使用什么参数 []?
          2. 这个参数[]会是什么[]?

          (B) 说到调用:

          1. 您将使用什么参数,[]?
          2. 什么[]将是[]这个参数?

          答案

          (一)

          1. 开启/加入/反对/使用此参数
          2. argument(s) ...采取

          (B)

          1. 还有哪些示例参数
          2. argument(s) ... 用于/in/against/with

          重叠

          您可以想象,在回答:在口语中,这些词有时会产生相同的反应!

          因此,作为一项规则:

          • 通常如果有人想要参数信息,他们想知道更多关于类型、变量名等的信息。如果你只给出示例参数,他们可能会感到困惑。

            • 通常,如果有人想要参数信息,他们想知道您传递给函数或其参数的值。

          【讨论】:

            【解决方案10】:

            函数/方法的参数向您描述了它用于计算其结果的值。

            函数的参数是在函数/方法的特定调用期间分配给这些参数的值。

            【讨论】:

              【解决方案11】:

              或者,在方法的可选参数的情况下,这样记住可能更简单:

              public void Method(string parameter = "argument") 
              {
              
              }
              

              parameter 是参数,它的值,"argument" 是参数:)

              【讨论】:

                【解决方案12】:

                这个例子可能会有所帮助。

                int main () {
                   int x = 5; 
                   int y = 4;
                
                   sum(x, y); // **x and y are arguments**
                }
                
                int sum(int one, int two) { // **one and two are parameters**
                   return one + two;
                }
                

                【讨论】:

                  【解决方案13】:

                  永远记住:
                  在接收参数的同时传递参数。

                  【讨论】:

                    【解决方案14】:

                    参数和参数

                    与参数和参数有关的所有不同术语 可能会令人困惑。但是,如果你记住几个简单的点, 您将能够轻松处理这些条款。

                    1. 函数的形参列在函数声明中,并在函数定义的主体中使用。一种 形式参数(任何类型的)是一种空白或占位符 函数被调用时填充了一些东西。
                    2. argument 是用来填充形式参数的东西。 当你写下一个函数调用时,参数列在 函数名后面的括号。当函数调用是 执行时,为形参插入实参。
                    3. 术语 call-by-valuecall-by-reference 指的是机制 在插件过程中使用。在按值调用方法中 仅使用参数的值。在这个按值调用 机制,形参是一个局部变量,即 初始化为相应参数的值。在里面 引用调用机制,参数是一个变量,而 使用整个变量。在引用调用机制中, 实参变量替换形式参数,使得 对形式参数所做的任何更改实际上都是针对 参数变量。

                    来源:Absolute C++,Walter Savitch

                    也就是说,

                    【讨论】:

                      【解决方案15】:

                      一般来说,术语参数和参数可以互换使用,表示传递给函数的信息。

                      然而,从函数的角度来看:

                      • 参数是函数定义中括号内列出的变量。
                      • 参数是在调用函数时发送给函数的值。

                      【讨论】:

                        【解决方案16】:

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

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

                        【讨论】:

                        • 但话说回来,术语 argument 也被重载了,至少在复杂分析中如此。
                        • 我有一个参数,认为它们可以互换。 ;)
                        【解决方案17】:

                        自变量是参数的实例化。

                        【讨论】:

                        • 这是很久以前另一个程序员给我的解释,我认为是非常清晰简洁的。出于这个原因,我把它贴在这里。
                        【解决方案18】:

                        是的!参数和参数有不同的含义,可以简单解释如下:

                        函数参数是函数定义中列出的名称。

                        函数参数是传递给函数(并由函数接收)的真实值。

                        【讨论】:

                          【解决方案19】:

                          没有代码的简单解释

                          “参数”是一个非常笼统、宽泛的东西,而“参数”是一个非常具体、具体的东西。通过日常示例可以很好地说明这一点:

                          示例 1:自动售货机 - Money 是参数,$2.00 是参数

                          大多数机器接受输入并返回输出。例如,自动售货机将货币作为输入,然后将汽水作为输出。在那种特殊情况下,它接受一个参数:money。

                          那么争论是什么?好吧,如果我将 $2.00 放入机器中,那么参数是:$2.00 - 这是使用的非常具体的输入。

                          示例 2:汽车 - 汽油是参数

                          让我们考虑一辆汽车:它们接受汽油(无铅汽油)作为输入。可以说这些机器接受参数类型:汽油。论据将是我放入汽车的准确而具体的输入。例如就我而言,论据是:40 升无铅汽油/汽油。

                          示例 3 - 参数详述

                          参数是输入的特定和特定示例。假设我的机器将一个人作为输入,然后将他们变成不是骗子的人。

                          那么什么是论证?争论将是实际放入机器中的特定人。例如如果将 Colin Powell 放入机器中,那么参数将是 Colin Powell。

                          所以参数将是作为抽象概念的人,但参数始终是具有特定名称的特定人 em> 谁被放入机器中。论点具体而具体。

                          这就是区别。很简单。

                          困惑?

                          发表评论,我会修正解释。

                          【讨论】:

                          • System.out.println(344);与int v=344; System.out.println(v);哪个是 Java 中的参数/参数?你能帮帮我吗?
                          • @user12208242 可能会为这些事情提出一个新问题。 344 是论据。在这种情况下,println 的参数看起来像一个整数。
                          【解决方案20】:

                          它们在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; 
                          }
                          

                          上述代码中num1num2是形参,ab是实参。

                          【讨论】:

                            【解决方案21】:

                            Oracle 的 Java 教程这样定义了这种区别: “参数是指方法声明中的变量列表。参数是调用方法时传入的实际值。调用方法时,使用的参数必须在类型和顺序上与声明的参数匹配。”

                            参数和实参更详细的讨论: https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html

                            【讨论】:

                              【解决方案22】:

                              从逻辑上讲,我们实际上在谈论同一件事。 但我认为一个简单的比喻将有助于解决这个困境。

                              如果隐喻可以称为各种连接点,我们可以将它们等同于墙上的插头点。 在这种情况下,我们可以考虑如下参数和参数;

                              参数是插头的插座,可以有各种不同的形状。但只有某些类型的插头适合它们。
                              参数将是插入插头点/插座以激活某些设备的实际插头。

                              【讨论】:

                                【解决方案23】:

                                参数是函数定义中的变量
                                参数是参数的

                                <?php
                                
                                    /* define function */
                                    function myFunction($parameter1, $parameter2)
                                    {
                                        echo "This is value of paramater 1: {$parameter1} <br />";
                                        echo "This is value of paramater 2: {$parameter2} <br />";
                                    }
                                
                                    /* call function with arguments*/
                                    myFunction(1, 2);
                                
                                ?>
                                

                                【讨论】:

                                  【解决方案24】:

                                  甚至更简单...

                                  !中的参数

                                  参数输出!

                                  【讨论】:

                                    【解决方案25】:

                                    当我们在Java中创建方法(函数)时,方法是这样的..

                                    data-type name of the method (data-type variable-name)

                                    括号里的就是参数,当我们调用方法(函数)的时候,我们传递这个参数的值,我们称之为arguments。

                                    【讨论】:

                                      【解决方案26】:

                                      根据 Joseph 的 Alabahari 书“C# in a Nutshell”(C# 7.0,第 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
                                      }
                                      

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

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

                                      在我的大学里,教授使用这两种名字。

                                      【讨论】:

                                        【解决方案27】:

                                        我想通了,意识到我之前的回答是错误的。这是一个更好的定义

                                        {想象一盒鸡蛋:一包香肠链接:还有一个女仆 } 这些代表了准备工作所需的函数的元素,称为:(使用任何名称:假设 Cooking 是我的功能)。

                                        女仆是一种方法。

                                        (你必须__call_或要求这个方法做早餐)(做早餐的行为是一个名为Cooking函数)_

                                        鸡蛋和香肠是参数:

                                        (因为你想吃的鸡蛋和香肠的数量是__variable_。)_

                                        你的决定是一个论据:

                                        它代表您正在烹饪的所选鸡蛋和/或香肠数量的__Value_。_

                                        {助记符}

                                        _“当你打电话给女仆让她做早餐时,她会和你__争论你应该吃多少鸡蛋和香肠。她担心你的胆固醇”__

                                        (因此,参数是您声明并决定传递给函数的参数组合的值)

                                        【讨论】:

                                          【解决方案28】:

                                          Parameter (computer programming) - Wikipedia中已经完美解释了

                                          简单地说,参数是类型,参数是实例。

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

                                          还有Parameter - Wikipedia

                                          computer programming 中,常用parameter 的两个概念,称为parameters and arguments——或更正式地称为形参实参强>。

                                          例如在函数的定义中如

                                          y = f(x) = x + 2,

                                          x是定义函数的形参参数)。

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

                                          f(3): or, y = f(3) = 3 + 2 = 5,

                                          实际参数参数),用于由定义的函数进行评估;它是一个给定值(实际值),用于替换定义函数的形参。 (在随意使用时,术语 parameterargument 可能会无意中互换,从而导致使用不正确。)

                                          【讨论】:

                                            【解决方案29】:

                                            由于我的背景和主要环境是 C,我将提供一些来自实际 C 标准和重要参考书的对该主题的陈述/引用,来自 C 的开发人员之一,这经常被引用和普遍视为C的第一个非官方标准:


                                            Brian W. Kernighan 和 Dennis M. Ritchie 的 C 编程语言(第 2 版)(1988 年 4 月):

                                            第 25 页,第 1.7 节 - 功能

                                            我们通常将parameter 用于函数定义中括号列表中命名的变量,argument 用于函数调用中使用的值。术语形式参数实际参数有时用于相同的区别。

                                            ISO/IEC 9899:2018 (C18):

                                            3.3

                                            论据

                                            实际参数

                                            已弃用:实际参数

                                            函数调用表达式中由括号包围的逗号分隔列表中的表达式,或类似函数的宏调用中由括号包围的逗号分隔列表中的一系列预处理标记。


                                            3.16

                                            参数

                                            形参

                                            不推荐使用:形式参数

                                            作为函数声明或定义的一部分声明的对象,该对象在函数入口处获取值,或来自逗号分隔列表的标识符,该列表由紧跟在类似函数的宏定义中的宏名称之后的括号界定。

                                            【讨论】:

                                              【解决方案30】:

                                              参数是函数接收的变量。因此它们在函数声明中可见。它们包含变量名称及其数据类型。 参数是传递给另一个函数的实际值。这就是为什么我们可以在函数调用中看到它们。它们只是没有数据类型的值

                                              【讨论】:

                                                猜你喜欢
                                                • 2020-05-25
                                                • 1970-01-01
                                                • 2020-01-16
                                                • 1970-01-01
                                                • 2014-10-06
                                                • 2013-07-24
                                                • 2013-01-08
                                                • 1970-01-01
                                                相关资源
                                                最近更新 更多