Введение
Ввод, передаваемый функции/подпрограмме. В компьютерном программировании параметр или формальный аргумент — это особый тип переменной, используемый в подпрограмме для обозначения одного из элементов данных, предоставляемых ей на вход. Эти элементы данных являются значениями аргументов (часто называемых фактическими аргументами или фактическими параметрами), с которыми подпрограмма будет вызвана/вызвана. Обычно в определение подпрограммы включается упорядоченный список параметров, так что при каждом вызове подпрограммы её аргументы для этого вызова вычисляются, и полученные значения присваиваются соответствующим параметрам. В отличие от значения аргумента в обычном математическом смысле, аргумент в информатике — это фактическое входное выражение, передаваемое/поставляемое функции, процедуре или подпрограмме в операторе вызова/вызова, в то время как параметр — это переменная внутри реализации подпрограммы. Например, если подпрограмма add определена как def add(x, y): return x + y, то x и y — параметры, а если она вызвана как add(2, 3), то 2 и 3 — аргументы. Переменные (и выражения, включающие их) из контекста вызова могут быть аргументами: если подпрограмма вызвана как a = 2; b = 3; add(a, b), то переменные a и b являются аргументами, а не значения 2 и 3. Более подробная информация приведена в разделе «Параметры и аргументы». Семантика объявления параметров и передачи (значений) аргументов параметрам подпрограмм определяется стратегией вычисления языка, а детали реализации в конкретной компьютерной системе зависят от соглашения о вызовах этой системы. В наиболее распространенном случае, при передаче по значению, параметр внутри подпрограммы действует как новая локальная переменная, инициализированная значением аргумента (локальная (изолированная) копия аргумента, если аргумент является переменной), но в других случаях, например, при передаче по ссылке, переменная аргумента, переданная вызывающей стороной, может быть изменена действиями внутри вызванной подпрограммы.
In computer programming, a parameter or a formal argument is a special kind of variable used in a subroutine to refer to one of the pieces of data provided as input to the subroutine. These pieces of data are the values of the arguments (often called actual arguments or actual parameters) with which the subroutine is going to be called/invoked. An ordered list of parameters is usually included in the definition of a subroutine, so that, each time the subroutine is called, its arguments for that call are evaluated, and the resulting values can be assigned to the corresponding parameters. Unlike argument in usual mathematical usage, the argument in computer science is the actual input expression passed/supplied to a function, procedure, or routine in the invocation/call statement, whereas the parameter is the variable inside the implementation of the subroutine. For example, if one defines the add subroutine as def add(x, y): return x + y, then x, y are parameters, while if this is called as add(2, 3), then 2, 3 are the arguments. Variables (and expressions thereof) from the calling context can be arguments: if the subroutine is called as a = 2; b = 3; add(a, b) then the variables a, b are the arguments, not the values 2, 3. See the Parameters and arguments section for more information. The semantics for how parameters can be declared and how the (value of) arguments are passed to the parameters of subroutines are defined by the evaluation strategy of the language, and the details of how this is represented in any particular computer system depend on the calling convention of that system. In the most common case, call by value, a parameter acts within the subroutine as a new local variable initialized to the value of the argument (a local (isolated) copy of the argument if the argument is a variable), but in other cases, e. g. call by reference, the argument variable supplied by the caller can be affected by actions within the called subroutine.
Типы данных
В строго типизированных языках программирования тип каждого параметра должен быть указан в объявлении процедуры. Языки с автоматическим выводом типов пытаются определить типы автоматически, исходя из тела функции и способов её использования. В динамически типизированных языках программирования разрешение типов откладывается до времени выполнения. В языках со слабой типизацией выполняется мало или вообще не выполняется проверка типов, и корректность обеспечивается программистом. Некоторые языки используют специальное ключевое слово (например, void) для указания, что подпрограмма не имеет параметров; в формальной теории типов такие функции принимают пустой список параметров (тип которого не void, а unit).
Аргумент проходит
Точный механизм сопоставления аргументов параметрам, называемый передачей аргументов, зависит от стратегии вычисления, используемой для данного параметра (как правило, передача по значению), которая может быть задана с помощью ключевых слов.
Множественные параметры в функциональных языках
В лямбда-исчислении каждая функция имеет ровно один параметр. То, что воспринимается как функции с несколькими параметрами, обычно представляется в лямбда-исчислении как функция, принимающая первый аргумент и возвращающая функцию, принимающую остальные аргументы; это преобразование известно как каррирование. Некоторые языки программирования, такие как ML и Haskell, следуют этой схеме. В этих языках каждая функция имеет ровно один параметр, и то, что может выглядеть как определение функции с несколькими параметрами, на самом деле является синтаксическим сахаром для определения функции, возвращающей функцию, и так далее. Применение функции является левоассоциативным в этих языках, а также в лямбда-исчислении, поэтому то, что выглядит как применение функции к нескольким аргументам, корректно вычисляется как применение функции к первому аргументу, затем применение полученной функции ко второму аргументу и так далее.