Введение

Ввод, передаваемый функции/подпрограмме. В компьютерном программировании параметр или формальный аргумент — это особый тип переменной, используемый в подпрограмме для обозначения одного из элементов данных, предоставляемых ей на вход. Эти элементы данных являются значениями аргументов (часто называемых фактическими аргументами или фактическими параметрами), с которыми подпрограмма будет вызвана/вызвана. Обычно в определение подпрограммы включается упорядоченный список параметров, так что при каждом вызове подпрограммы её аргументы для этого вызова вычисляются, и полученные значения присваиваются соответствующим параметрам. В отличие от значения аргумента в обычном математическом смысле, аргумент в информатике — это фактическое входное выражение, передаваемое/поставляемое функции, процедуре или подпрограмме в операторе вызова/вызова, в то время как параметр — это переменная внутри реализации подпрограммы. Например, если подпрограмма 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. Более подробная информация приведена в разделе «Параметры и аргументы». Семантика объявления параметров и передачи (значений) аргументов параметрам подпрограмм определяется стратегией вычисления языка, а детали реализации в конкретной компьютерной системе зависят от соглашения о вызовах этой системы. В наиболее распространенном случае, при передаче по значению, параметр внутри подпрограммы действует как новая локальная переменная, инициализированная значением аргумента (локальная (изолированная) копия аргумента, если аргумент является переменной), но в других случаях, например, при передаче по ссылке, переменная аргумента, переданная вызывающей стороной, может быть изменена действиями внутри вызванной подпрограммы.

Типы данных

В строго типизированных языках программирования тип каждого параметра должен быть указан в объявлении процедуры. Языки с автоматическим выводом типов пытаются определить типы автоматически, исходя из тела функции и способов её использования. В динамически типизированных языках программирования разрешение типов откладывается до времени выполнения. В языках со слабой типизацией выполняется мало или вообще не выполняется проверка типов, и корректность обеспечивается программистом. Некоторые языки используют специальное ключевое слово (например, void) для указания, что подпрограмма не имеет параметров; в формальной теории типов такие функции принимают пустой список параметров (тип которого не void, а unit).

Аргумент проходит

Точный механизм сопоставления аргументов параметрам, называемый передачей аргументов, зависит от стратегии вычисления, используемой для данного параметра (как правило, передача по значению), которая может быть задана с помощью ключевых слов.

Множественные параметры в функциональных языках

В лямбда-исчислении каждая функция имеет ровно один параметр. То, что воспринимается как функции с несколькими параметрами, обычно представляется в лямбда-исчислении как функция, принимающая первый аргумент и возвращающая функцию, принимающую остальные аргументы; это преобразование известно как каррирование. Некоторые языки программирования, такие как ML и Haskell, следуют этой схеме. В этих языках каждая функция имеет ровно один параметр, и то, что может выглядеть как определение функции с несколькими параметрами, на самом деле является синтаксическим сахаром для определения функции, возвращающей функцию, и так далее. Применение функции является левоассоциативным в этих языках, а также в лямбда-исчислении, поэтому то, что выглядит как применение функции к нескольким аргументам, корректно вычисляется как применение функции к первому аргументу, затем применение полученной функции ко второму аргументу и так далее.