Что такое параметры в информатике
Параметр (программирование)
Связанные понятия
В языках программирования объявле́ние (англ. declaration) включает в себя указание идентификатора, типа, а также других аспектов элементов языка, например, переменных и функций. Объявление используется, чтобы уведомить компилятор о существовании элемента; это весьма важно для многих языков (например, таких как Си), требующих объявления переменных перед их использованием.
Упоминания в литературе
Связанные понятия (продолжение)
Из-за путаницы с терминологией словом «оператор» в программировании нередко обозначают операцию (англ. operator), см. Операция (программирование).Инстру́кция или опера́тор (англ. statement) — наименьшая автономная часть языка программирования; команда или набор команд. Программа обычно представляет собой последовательность инструкций.
Побо́чные эффе́кты (англ. side effects) — любые действия работающей программы, изменяющие среду выполнения (англ. execution environment). Например, к побочным эффектам относятся.
По одной из классификаций, языки программирования неформально делятся на сильно и слабо типизированные (англ. strongly and weakly typed), то есть обладающие сильной или слабой системой типов. Эти термины не являются однозначно трактуемыми, и чаще всего используются для указания на достоинства и недостатки конкретного языка. Существуют более конкретные понятия, которые и приводят к называнию тех или иных систем типов «сильными» или «слабыми».
В информатике, спи́сок (англ. list) — это абстрактный тип данных, представляющий собой упорядоченный набор значений, в котором некоторое значение может встречаться более одного раза. Экземпляр списка является компьютерной реализацией математического понятия конечной последовательности.
В информатике и теории автоматов состояние цифровой логической схемы или компьютерной программы является техническим термином для всей хранимой информации, к которой схема или программа в данный момент времени имеет доступ. Вывод данных цифровой схемы или компьютерной программы в любой момент времени полностью определяется его текущими входными данными и его состоянием.
Параметры (информатика)
Различают «формальные параметры» (= как часть определения функции в программном коде; пример 🙂 (
Если аргумент не передается для каждого параметра при вызове (под) программы, это может использовать стандартное предположение, сделанное при создании программы, или (в зависимости от реализации) обработка может быть отменена из-за отсутствия параметров.
Содержание
Назначение параметров
С точки зрения концепции системы параметры являются входными данными ; однако они отличаются от обычных входных данных, например Б. следующим образом:
Различные термины параметров
Параметры используются в различных функциях информатики:
При использовании нескольких параметров важно уметь идентифицировать и различать отдельные параметры. Для этого есть два метода обнаружения:
Допускаются ли пустые параметры и как их обрабатывать, например Б. пустая строка символов или стандартное предположение ( аргумент по умолчанию для английского языка ) должна обрабатываться программой. Формат, в котором они должны быть указаны, также должен быть указан / согласован для обоих вариантов ; в примере: «чч: мм», по 2 цифры, разделенные двоеточием.
Кроме того, параметры можно различать по:
Примеры параметров
В самом широком смысле компьютерные команды (на всех языках программирования, а также на машинном языке ) являются параметрами: они содержат код функции, а также адреса, длину и т. Д. Для данных, подлежащих обработке. Информация интерпретируется и декодируется блоком управления компьютера и исполняется соответствующим образом.
Конкретный пример применения параметров:
В рамках приложения для управления счетами должна быть создана программа, которая выводит счета для пользователей в виде списка. В качестве технического требования было определено, что в этом списке отображаются все еще не оплаченные счета-фактуры старше 1 месяца, рассчитанные на момент запуска программы.
СМИ для передачи параметров
Параметры в подпрограммах
Передача параметров / аргументов
Перенос через стек
Для этого в других системных средах используется стековый механизм. В этих случаях необходимы следующие базовые знания, чтобы понять, как работают подпрограммы:
В основном память процессоров делится на
У каждого потока есть свой стек. В этом сохраняются:
Параметры передаются через стек. Каждый фактический параметр помещается в стек в том порядке, в котором он обрабатывается, обычно слева направо (в соответствии со строго определенным соглашением о вызовах ). При необходимости он конвертируется в формат, требуемый подпрограммой.
Значения или ссылки / указатели как параметры
Вызов function(data) без оператора ссылки & приводит к синтаксической ошибке. В C, однако, только если известен прототип вызываемой функции.
В C или C ++ также можно запрограммировать передачу значений вместо обычно разумной и обычной передачи ссылок. Выглядит это так:
При вызове все содержимое структуры копируется в стек. Это может быть много, если структура обширная. Это может привести к сбою всего процесса, если пределы стека превышены, а это не распознается в среде выполнения. Перенос стоимости полезен в следующих случаях:
Обратная запись через ссылочные данные
Во многих языках программирования результаты также могут быть записаны обратно с использованием ссылок, которые были переданы как параметры подпрограммы, например, в C и C ++:
Это также относится к Java. Ответная реакция может быть нежелательной, так как следует предотвратить побочные эффекты. Подпрограмма должна обрабатывать значения определенных структур данных только для чтения и не должна на них влиять. В C ++ (или в C) можно сформулировать:
Обозначение, используемое здесь с ключевым словом, const должно пояснять, что указанная (указанная) область должна рассматриваться как постоянная. Возможно, const Type* то, что написано, является синтаксически и семантически идентичным. Только в этом случае можно вообще передать область памяти, объявленную постоянной. Постройка
Однако в C и C ++ можно изменить тип указателя внутри функции и при этом по-прежнему иметь доступ для записи в область памяти. Такое программирование следует использовать только в особых случаях и должным образом задокументировать извне.
В объектно-ориентированном программировании на Java и C ++ ссылка на this данные класса неявно передается с указателем. Поэтому всегда можно записать свои собственные данные для методов класса.
Реализация на машинном уровне
Для подпрограмм на уровне машинного языка (ассемблер) это не имеет особого значения, или это зависит от программиста, как он управляет передачей параметров и адресом возврата. Также возможна передача и сохранение только в регистрах процессора. Однако при управлении адресом возврата необходимо учитывать необходимость вложенного вызова нескольких (обычно разных) подпрограмм внутри друг друга. Ограничение до нескольких или только одного уровня имеет смысл только для очень простых задач. Однако на самом деле такие концепции существуют для специализированных процессоров и задач.
На ассемблере все это нужно программировать самостоятельно. В языках программирования C ++ и C это делает переводчик. В Java то же самое происходит в областях памяти виртуальной машины, организованных с помощью байт-кода (сгенерированного транслятором Java) и машинного кода в виртуальной машине.
В качестве иллюстрации показан сгенерированный код ассемблера ( ассемблер 80×86 ) следующей простой функции:
Машинный код для звонка: float y = parabel(2.0F);
Машинный код подпрограммы:
В следующем примере показан рукописный код ассемблера для сигнального процессора ADSP-216x от Analog Devices для вызова следующей функции из C:
Определение и техническое применение параметров подпрограммы
Формальные параметры
Пример: объявление подпрограммы в языках программирования PASCAL и Delphi с x и y в качестве формальных параметров:
Формальные параметры здесь x и y являются заполнителями для аргументов или фактических параметров, которые должны передаваться каждый раз, когда они используются.
Фактические параметры или аргументы
Пример: вызов подпрограммы с различными фактическими параметрами:
Подсказка типов
Замените формальные параметры фактическими
Существуют различные методы замены формальных параметров фактическими параметрами во время передачи параметров:
В макросе формальный параметр текстуально заменяется фактическим параметром. Отличие параметров имени в том, что разрешены конфликты имен. Если в фактическом параметре есть переменная, имя которой совпадает с именем локальной переменной, локальная переменная используется для раскрытия макроса.
Современные процедурные языки программирования обычно поддерживают параметры значений и ссылочные параметры, а иногда также параметры значений результатов.
Пример передачи различных параметров
Объяснение: Призывы test не изменять переменные a и b, чтобы переменные сохраняли свое исходное значение после завершения подпрограммы.
Вывод для справочных параметров ( вызов по ссылке )
Вывод для параметров результата значения ( вызов по значению и результат )
Параметры командной строки
Пример: фиктивный вызов программы через командную строку под Windows
В DOS (в традициях OpenVMS ) «/» традиционно используется вместо «-», а значения имен параметров разделяются «=». Оба стиля можно найти в Windows.
Урок №13. Параметры и аргументы функций
Обновл. 11 Сен 2021 |
На предыдущем уроке мы говорили о том, что функция может возвращать значение обратно в caller, используя оператор return. На этом уроке мы узнаем, что такое аргументы в функции и что такое параметры в функции.
Параметры и аргументы функций
Во многих случаях нам нужно будет передавать данные в вызываемую функцию, чтобы она могла с ними как-то взаимодействовать. Например, если мы хотим написать функцию умножения двух чисел, то нам нужно каким-то образом сообщить функции, какие это будут числа. В противном случае, как она узнает, что на что перемножать? Здесь нам на помощь приходят параметры и аргументы.
Параметр функции — это переменная, которая используется в функции, и значение которой предоставляет caller (вызывающий объект). Параметры указываются при объявлении функции в круглых скобках. Если их много, то они перечисляются через запятую, например:
Аргумент функции — это значение, которое передается из caller-а в функцию и которое указывается в скобках при вызове функции в caller-е:
Обратите внимание, аргументы тоже перечисляются через запятую. Количество аргументов должно совпадать с количеством параметров, иначе компилятор выдаст сообщение об ошибке.
Как работают параметры и аргументы функций?
При вызове функции, все её параметры создаются как локальные переменные, а значение каждого из аргументов копируется в соответствующий параметр (локальную переменную). Этот процесс называется передачей по значению. Например:
Как работают параметры и возвращаемые значения функций?
Используя параметры и возвращаемые значения, мы можем создавать функции, которые будут принимать и обрабатывать данные, а затем возвращать результат обратно в caller.
Например, простая функция, которая принимает два целых числа и возвращает их сумму:
Результат выполнения программы:
Еще примеры
Рассмотрим еще несколько вызовов функций:
Результат выполнения программы:
С первыми двумя вызовами всё понятно.
Следующая пара относительно лёгкая для понимания:
Теперь рассмотрим вызов посложнее:
add(1, multiply(2, 3)) => add(1, 6) => 7
Последний вызов может показаться немного сложным из-за того, что параметром функции add() является другой вызов add():
add(1, add(2, 3)) => add(1, 5) => 6
Задание №1: Что не так со следующим фрагментом кода?
Задание №2: Какие здесь есть две проблемы?
Задание №3: Какой результат выполнения следующей программы?
Задание №4: Напишите функцию doubleNumber(), которая принимает целое число в качестве параметра, удваивает его, а затем возвращает результат обратно в caller.
Задание №5: Напишите полноценную программу, которая принимает целое число от пользователя (используйте std::cin), удваивает его с помощью функции doubleNumber() из предыдущего задания, а затем выводит результат на экран.
Ответы
Чтобы просмотреть ответ, кликните на него мышкой.
Ответ №1
Функция multiply() имеет тип возврата void, что означает, что эта функция не возвращает значения. Но, так как она все равно пытается возвратить значение с помощью оператора return, мы получим ошибку от компилятора. Функция должна иметь тип возврата int.
Ответ №2
Проблема №1: main() передает один аргумент в multiply(), но multiply() имеет два параметра.
Проблема №2: multiply() вычисляет результат и присваивает его локальной переменной, которую не возвращает обратно в main(). А поскольку тип возврата функции multiply() — int, то мы получим ошибку (в некоторых компиляторах) или неожиданные результаты (в остальных компиляторах).
Ответ №3
Параметр (компьютерное программирование)
После того, как функция определена, ее можно вызывать следующим образом:
Чтобы лучше понять разницу, рассмотрим следующую функцию, написанную на C :
Код, вызывающий функцию Sum, может выглядеть так:
Альтернативная конвенция в Эйфеле
Рассмотрим следующее стандартное определение:
В строго типизированных языках программирования тип каждого параметра должен быть указан в объявлении процедуры. Языки, использующие вывод типов, пытаются автоматически обнаруживать типы из тела функции и использования. Языки программирования с динамической типизацией откладывают разрешение типов до времени выполнения. Слабо типизированные языки практически не имеют разрешения типов, вместо этого полагаясь на правильность программиста.
Аргументы по умолчанию
Аргументы по умолчанию можно рассматривать как частный случай списка аргументов переменной длины.
Списки параметров переменной длины
Именованные параметры
Несколько параметров на функциональных языках
В некоторых случаях различаются только ввод и ввод / вывод, при этом вывод рассматривается как конкретное использование ввода / вывода, а в других случаях поддерживаются только ввод и вывод (но не ввод / вывод). Режим по умолчанию зависит от языка: в Fortran 90 ввод / вывод по умолчанию, в C # и расширениях SQL ввод по умолчанию, а в TScript каждый параметр явно указывается как ввод или вывод.
Синтаксически режим параметра обычно указывается ключевым словом в объявлении функции, например, void f(out int x) в C #. Обычно выходные параметры часто помещаются в конец списка параметров, чтобы их четко различать, хотя это не всегда соблюдается. TScript использует другой подход, когда в объявлении функции перечислены входные параметры, затем выходные параметры, разделенные двоеточием (:), и нет типа возврата для самой функции, как в этой функции, которая вычисляет размер текста. фрагмент:
Использовать
Например, чтобы вернуть две переменные из функции в C, можно написать:
и может использоваться следующим образом:
Аналогичные соображения применимы к возврату значения одного из нескольких возможных типов, где возвращаемое значение может указывать тип, а затем значение сохраняется в одной из нескольких выходных переменных.
Недостатки
при записи с параметрами вывода и ввода / вывода вместо этого становится (поскольку F это выходной параметр для параметра G ввода / вывода):
В особом случае функции с одним выходным или входным / выходным параметром и без возвращаемого значения, композиция функции возможна, если выходной или входной / выходной параметр (или в C / C ++, его адрес) также возвращается функцией, в этом случае приведенное выше становится:
Альтернативы
Существуют различные альтернативы вариантам использования выходных параметров.
Вместо этого для возврата значения одного из нескольких типов можно использовать помеченное объединение ; наиболее распространенными случаями являются типы, допускающие значение NULL ( типы параметров ), где возвращаемое значение может быть нулевым, чтобы указать на сбой. Для обработки исключений можно вернуть тип, допускающий значение NULL, или вызвать исключение. Например, в Python может быть:
или, более идиоматично:
Микрооптимизация, заключающаяся в том, что не требуется локальная переменная и копирует возвращаемый результат при использовании выходных переменных, также может быть применена к обычным функциям и возвращаемым значениям достаточно сложными компиляторами.
Обычной альтернативой выходным параметрам в C и родственных языках является возврат единой структуры данных, содержащей все возвращаемые значения. [10] Например, учитывая структуру, инкапсулирующую ширину и высоту, можно написать:
Параметр (программирование)
Пара́метр в программировании — принятый функцией аргумент. Термин «аргумент» подразумевает, что конкретно и какой конкретной функции было передано, а параметр — в каком качестве функция применила это принятое. Т.е. вызывающий код передает аргумент в параметр, который определен в спецификации функции.
Содержание
Фактический или формальный
По способу применения различают:
Передача параметра
Передача параметра возможна по значению и по ссылке. Иногда также используют выражение «передача параметра по адресу». Ниже приведён пример, иллюстрирующий различия этих способов.
Передача параметра по значению
Передача параметра по значению означает что вызывающая функция копирует в память, доступную вызываемой, (обычно стек) непосредственное значение. Изменение копии переменной, соответственно, оригинал не затрагивает.
Передача параметра по адресу
Если необходимо именно изменить переменную из внешней, по отношению к вызываемой функции, области видимости, можно копировать адрес переменной, подлежащей изменению. Соответственно при вызове функции g(&x) приходится использовать операцию взятия адреса. Эта техническая деталь отвлекает внимание программиста от логики прикладной программы, однако в случаях невозможности передачи по ссылке может оказаться единственным решением.
Можно заметить, что передача параметра по адресу является частным случаем передачи по значению: передаваемым значением является адрес, по которому можно найти другое значение — значение переменной x.
Передача параметра по ссылке
Передача параметра по ссылке означает что копируется не само значение, а адрес исходной переменной (как в случае передачи параметра по адресу), однако синтаксис используется такой, чтобы программисту не приходилось использовать операцию разыменования и он мог иметь дело непосредственно со значением, хранящимся по этому адресу (как в случае передачи параметра по значению).
Передача по ссылке позволяет избежать копирования всей информации, описывающей состояние объекта (а это может быть существенно больше чем sizeof(int)) и является необходимой для конструктора копирования.
Если функция возвращает значение по ссылке (например, в виде «return *this;»), то её вызов можно использовать слева от оператора присваивания (смотри также L-выражение).
В случае если передача по ссылке используется именно как средство увеличения быстродействия, но изменение параметра нежелательно, можно использовать передачу по ссылке константного объекта.
Таким образом можно ожидать, что примерная программа напечатает (если закоментировать ошибочную строку) «0010 022 233 333».
См. также
Литература
Ссылки
Полезное
Смотреть что такое «Параметр (программирование)» в других словарях:
Параметр (значения) — Параметр (математика) Параметр (программирование) Параметр (свойство карт ККИ) Параметр (техника) … Википедия
ПРОГРАММИРОВАНИЕ ТЕОРЕТИЧЕСКОЕ — математическая дисциплина, изучающая математич. абстракции программ, трактуемых как объекты, выраженные на формальном языке, обладающие определенной информационной и логич. структурой и подлежащие исполнению на автоматич. устройствах. П. т.… … Математическая энциклопедия
ПРОГРАММИРОВАНИЕ ПАРАЛЛЕЛЬНОЕ — раздел программирования, связанный с изучением и разработкой методов и средств для: а) адекватного описания в программах естественного параллелизма моделируемых в ЭВМ и управляемых ЭВМ систем и процессов, б) распараллеливания обработки информации … Математическая энциклопедия
Аргумент (программирование) — У этого термина существуют и другие значения, см. Аргумент. В программировании: аргумент функции значение (число, указатель и т. д.), передаваемое функции, а также символьное имя (название переменной) в тексте программы,… … Википедия
Параметрическое программирование — (англ. parametrical programming) У этого термина существуют и другие значения, см. Параметрическое программирование (значения). Параметрическое программирование (Макропрограммирование) это язык программирования ЧПУ. Производители систем… … Википедия
Обобщённое программирование — (англ. generic programming) парадигма программирования, заключающаяся в таком описании данных и алгоритмов, которое можно применять к различным типам данных, не меняя само это описание. В том или ином виде поддерживается разными… … Википедия
Обобщенное программирование — Обобщённое программирование парадигма программирования, заключающаяся в таком описании данных и алгоритмов, которое можно применять к различным типам данных, не меняя само это описание. В том или ином виде поддерживается разными языками… … Википедия
Процедура (программирование) — Подпрограмма (англ. subprogram) поименованная или иным образом идентифицированная часть компьютерной программы, содержащая описание определённого набора действий. Подпрограмма может быть многократно вызвана из разных частей программы. В языках… … Википедия
Шаблон (программирование) — Шаблоны (англ. template) средство языка C++, предназначенное для кодирования обобщённых алгоритмов, без привязки к некоторым параметрам (например типам данных, размерам буферов, значениям по умолчанию). В C++ возможно создание шаблонов функций и … Википедия