The terms
parameter and
argument may have different meanings in different programming languages. Sometimes they are used interchangeably, and the context is used to distinguish the meaning. The term
parameter (sometimes called
formal parameter) is often used to refer to the variable as found in the function
declaration, while
argument (sometimes called
actual parameter) refers to the actual input supplied at a function call statement. For example, if one defines a function as def f(x): ..., then x is the parameter, and if it is called by a = ...; f(a) then a is the argument. A parameter is an (unbound) variable, while the argument can be a
literal or variable or more complex expression involving literals and variables. In case of call by value, what is passed to the function is the value of the argument – for example, f(2) and a = 2; f(a) are equivalent calls – while in call by reference, with a variable as argument, what is passed is a reference to that variable - even though the syntax for the function call could stay the same. The specification for
pass-by-reference or
pass-by-value would be made in the function declaration and/or definition. Parameters appear in procedure definitions; arguments appear in procedure calls. In the function definition f(x) = x*x the variable x is a parameter; in the function call f(2) the value 2 is the argument of the function. Loosely, a parameter is a type, and an argument is an instance. A parameter is an intrinsic property of the procedure, included in its definition. For example, in many languages, a procedure to add two supplied integers together and calculate the sum would need two parameters, one for each integer. In general, a procedure may be defined with any number of parameters, or no parameters at all. If a procedure has parameters, the part of its definition that specifies the parameters is called its
parameter list. By contrast, the arguments are the expressions supplied to the procedure when it is called, usually one expression matching one of the parameters. Unlike the parameters, which form an unchanging part of the procedure's definition, the arguments may vary from call to call. Each time a procedure is called, the part of the procedure call that specifies the arguments is called the
argument list. Although parameters are also commonly referred to as arguments, arguments are sometimes thought of as the actual values or references assigned to the parameter variables when the function is called at
run-time. When discussing code that is calling into a function, any values or references passed into the function are the arguments, and the place in the code where these values or references are given is the
parameter list. When discussing the code inside the function definition, the variables in the function's parameter list are the parameters, while the values of the parameters at runtime are the arguments. Consider the following
C function,
sum, which has two parameters,
addend1 and
addend2. It adds the values passed into the parameters, and returns the result to the function's caller. int sum(int addend1, int addend2) { return addend1 + addend2; } The following is an example of calling
sum. The variables
value1 and
value2 are initialized and then passed to
Sum as the arguments. At runtime, the values assigned to these variables are passed to
sum. In
sum, the parameters
addend1 and
addend2 are evaluated, yielding the arguments 40 and 2, respectively. The values of the arguments are added, and the result is returned to the caller, where it is assigned to the variable
sum_value. int value1 = 40; int value2 = 2; int sum_value = sum(value1, value2); Because of the difference between parameters and arguments, it is possible to supply inappropriate arguments to a procedure. The call may supply too many or too few arguments, one or more of the arguments may be a wrong type, or arguments may be supplied in the wrong order. Any of these situations causes a mismatch between the parameter and argument lists, and the procedure will often return an unintended answer or generate a
runtime error.
Alternative convention in Eiffel Within the
Eiffel software development method and language, the terms
argument and
parameter have distinct uses established by convention. The term
argument is used exclusively in reference to a routine's inputs, and the term
parameter is used exclusively in type parameterization for
generic classes. Consider the following routine definition: sum (addend1: INTEGER; addend2: INTEGER): INTEGER do Result := addend1 + addend2 end The routine sum takes two arguments addend1 and addend2, which are called the routine's
formal arguments. A call to sum specifies
actual arguments, as shown below with value1 and value2. sum_value: INTEGER value1: INTEGER = 40 value2: INTEGER = 2 … sum_value := sum (value1, value2) Parameters are also thought of as either
formal or
actual.
Formal generic parameters are used in the definition of generic classes. In the example below, the class HASH_TABLE is declared as a generic class which has two formal generic parameters, G representing data of interest and K representing the hash key for the data: class HASH_TABLE [G, K -> HASHABLE] … When a class becomes a client to HASH_TABLE, the formal generic parameters are substituted with
actual generic parameters in a
generic derivation. In the following attribute declaration, my_dictionary is to be used as a
character string based
dictionary. As such, both data and key formal generic parameters are substituted with actual generic parameters of type STRING. my_dictionary: HASH_TABLE [STRING, STRING] == Datatypes ==