Я часто не понимаю, как используются термины «аргументы» и «параметры». Кажется, что в мире программирования они взаимозаменяемы.
Какое правильное соглашение об их использовании?
@Jonik: Это не совсем специфично для C#, поскольку на плакате также задавались вопросы о терминах в других языках программирования. Другой вопрос старше и (на мой взгляд) имеет лучшие ответы.
И если мы рассматриваем его как языково-независимый, то это действительно обман.





Параметры - это вещи, определенные функциями как входные, аргументы - это вещи, переданные как параметры.
void foo(int bar) { ... }
foo(baz);
В этом примере bar - это параметр для foo. baz - это аргумент, переданный foo.
У Рината есть Формальное определение - то, что у вас есть, не является неправильным, но и не совсем правильным.
Аргументы - это то, что у вас есть, когда вы вызываете подпрограмму. Параметры - это то, к чему вы обращаетесь внутри подпрограммы.
argle(foo, bar);
foo и bar - аргументы.
public static void main(final String[] args) {
args.length;
}
args - это параметр.
"args - параметр". Согласны ли вы с args в качестве наименования?
@Liam Я бы, наверное, не выбрал это, но это соглашение, поэтому я придерживаюсь его, чтобы избежать путаницы.
@Liam: Здесь немного поздно, но: args - это параметр, но его содержимое - это аргументы, которые были переданы в командной строке для запуска программы. Называть его parameters было бы неправильно, потому что, хотя сама переменная (в сигнатуре метода) является параметром, содержимое этого массива (время выполнения) не является параметрами.
Хотя Википедия вряд ли является авторитетным источником, она неплохо справляется с объясняя условия.
Я думаю, вы могли бы сказать, что параметры относятся к аргументам, а классы относятся к экземплярам объектов ...
Параметр - это переменная в объявлении функции:
functionName(parameter) {
// do something
}
Аргумент - это фактическое значение этой переменной, которое передается функции:
functionName(argument);
Это объяснение формальный и верный.
Ах, значит, параметр - это формальный аргумент, а аргумент - это фактический аргумент. ;-)
На эту тему есть хороший раздел в статье Википедии параметр.
Вкратце - параметр - это формальное имя, определяемое функцией, а аргумент - это фактическое значение (например, 5) или вещь (например, переменная), переданная в функцию.
Для user1515422 очень конкретный пример, показывающий разницу между параметрами и аргументами:
Рассмотрим эту функцию:
int divide(int numerator, int denominator) {
return numerator/denominator;
}
У него есть два параметры: numerator и denominator, которые устанавливаются, когда он определен. После определения параметры функции фиксируются и не изменяются.
Теперь рассмотрим вызов этой функции:
int result = divide(8, 4);
В этом случае 8 и 4 - это аргументы, переданные функции. Параметр numerator устанавливается равным значению аргумента 8, а denominator устанавливается равным 4. Затем функция оценивается с параметрами, установленными на значение аргументов. Вы можете думать об этом как об эквиваленте:
int divide() {
int numerator = 8;
int denominator = 4;
return numerator/denominator;
}
Разница между параметром и аргументом сродни разнице между переменной и ее значением. Если я напишу int x = 5;, переменная будет x, а значение - 5. Может возникнуть путаница, потому что естественно говорить такие вещи, как «x равно пяти», как сокращение от «переменная x имеет значение 5», но, надеюсь, различие очевидно.
Это проясняет ситуацию?
Просто нет серьезных отличий. Если мы углубимся в это, мы сможем идентифицировать разницу. В основном мы знаем, что аргумент / параметр / сигнатура одинаковы.
В основном Параметр определяет тип данных, которые мы передаем, а Аргумент определяет фактические данные / переменную, которые мы передаем.
Пример параметра: -
int add(int a,int b){ //Here a and be both can treated as Parameter
return a+b;
}
Пример аргумента: -
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
В большинстве случаев процедура требует некоторой информации об обстоятельствах, при которых она была вызвана. Процедура, выполняющая повторяющиеся или совместно используемые задачи, использует различную информацию для каждого вызова. Эта информация состоит из переменных, констант и выражений, которые вы передаете процедуре при ее вызове.
Чтобы передать эту информацию процедуре, процедура определяет параметр, а вызывающий код передает аргумент этому параметру. Вы можете рассматривать параметр как место для парковки, а аргумент - как автомобиль. Подобно тому, как разные автомобили могут парковаться на парковке в разное время, вызывающий код может передавать разные аргументы одному и тому же параметру каждый раз, когда он вызывает процедуру.
Параметры
Параметр представляет собой значение, которое процедура ожидает от вас при вызове. Объявление процедуры определяет ее параметры.
Когда вы определяете Функция или Подпроцедура, вы указываете список параметров в круглых скобках сразу после имени процедуры. Для каждого параметра вы указываете имя, тип данных и механизм передачи (ByVal или ByRef). Вы также можете указать, что параметр является необязательным, то есть вызывающий код не должен передавать для него значение.
Имя каждого параметра служит локальной переменной внутри процедуры. Вы используете имя параметра так же, как и любую другую переменную.
Аргументы
Аргумент представляет значение, которое вы передаете параметру процедуры при вызове процедуры. Вызывающий код предоставляет аргументы при вызове процедуры.
Когда вы вызываете Функция или Подпроцедура, вы включаете список аргументов в круглые скобки сразу после имени процедуры. Каждый аргумент соответствует параметру в той же позиции в списке.
В отличие от определения параметра, аргументы не имеют имен. Каждый аргумент - это выражение, которое может содержать ноль или более переменных, констант и литералов. Тип данных вычисляемого выражения обычно должен соответствовать типу данных, определенному для соответствующего параметра, и в любом случае он должен быть преобразован в тип параметра.
Фактически, и параметр, и аргумент - это разные типы параметров. Это
1)Formal Parameters - variables appear in function/subroutine definitions
для напр. (на Java)
public void foo(Integer integer, String... s2)
Здесь и целое число, и s2 являются формальными параметрами или, грубо говоря, параметрами.
2)Actual parameters or arguments - variables appear in subroutines while calling the
already defined subroutine
для напр. (на Java) Предположим, если функция «foo» находится в объекте «testObject»,
testObject.foo(new Integer(1), "test")
Таким образом, переменные в определении функции называются формальными параметрами или просто параметрами и переменными, а вызываемые методы вызываются как фактические параметры или аргументы. Я надеюсь, что это помогает.
Думайте об этом как об основной алгебре. X - это параметр, который вы должны заполнить, а число, которое вы помещаете внутри него, является аргументом. Итак, если у вас есть уравнение, подобное X + 2, X - ваш параметр, и любые числа, которые вы меняете для X, становятся аргументами. Таким образом, если использовать это уравнение, вы добавите 1 к x, вы получите 1 + 2. Это означает, что 1 - это аргумент, передаваемый параметру X.
Точно так же, если у вас есть такая функция, как dosomething («This»), ее определение будет dosomething (строковое имя параметра), но «This» будет фактическим аргументом, который передается параметру, здесь именуемому параметром.
Проще говоря, параметр - это то, что аргумент заполняет, и аргументом может быть любое количество вещей, разрешенных этим параметром.
Таким образом, между параметрами и аргументами существует взаимосвязь «многие к одному», так как у вас может быть один параметр, который может иметь много действительных аргументов, как наше уравнение X + 1 выше. X может быть любым известным числом, и все они действительны.
Когда вы определяете такую функцию, как:
MyFunction(param1,param2) {
print parameter1, parameter
}
Вы устанавливаете параметры при определении функции. Когда вы вызываете функцию так:
MyFunction('argument1', 'argument2');
Вы устанавливаете значения параметров в соответствии с переданными вами аргументами. Аргументы - это то, что вы задаете вопросом, когда его называете. Надеюсь, это помогло.
Переменная - это место хранения и связанное с ним символическое имя (идентификатор), которое содержит данные, значение.
Параметр - это переменная, переданная функции.
Аргумент - это данные (значение), переданные функции.
$variable = 'data/value';
function first($variable){ ... }
function second('data/value'){ ... }
function third(16){ ... }
В функции сначала мы передаем параметр.
Во вторую и третью функции мы передаем аргументы.
Для записи, тесно связанный вопрос: stackoverflow.com/questions/156767/… (Он сформулирован как специфичный для C#, в то время как он не зависит от языка; в основном то же самое в остальном.)