Процедуры подпрограммы и функции

Параметры и аргументы

Параметры являются элементами подпрограммы и используются при описании ее алгоритма. Аргументы указываются при вызове подпрограммы и замещают параметры при выполнении подпрограммы. Параметры могут быть любого типа, включая структурированный. Существуют следующие виды параметров [4]:

· Нетипизированная константа и переменная

Группа параметров, перед которыми в заголовке подпрограммы отсутствуют слова var или const и за которыми следует указание их типа, называются параметрами-значениями. В подпрограмме значения таких параметров можно изменять, но эти изменения не влияют на значение соответствующих им аргументов, которые были подставлены вместо фактических параметров-значений [4]. Например

Procedure Print(K:array of integer);

Заметим, что если в качестве параметра передается массив, то указывается только тип элементов, без указания размера.

Обратите внимание!Если в качестве параметра используется массив, то внутри подпрограммы нумерация его элементов всегда начинается с нуля, поэтому рекомендуется объявлять глобальный массив размерностью с нуля. Для передачи двумерного массива лучше объявить cпециальный тип и передавать в качестве параметра переменную созданного типа.

MyType=array [0..Nmax,0..Nmax] of ….;

Группа параметров, перед которыми в заголовке подпрограммы стоит слово const и за которыми следует описание их типа, называют параметрами-константами. В теле подпрограммы значение параметра-константы изменить нельзя [4].

Группа параметров, перед которыми в заголовке подпрограммы стоит слово var и за которыми следует описание их типа, называют параметрами-переменными. Они используются в тех случаях, когда значение должно быть передано из подпрограммы в вызывающий блок. В этом случае при вызове подпрограммы параметр-переменная замещается аргументом, и любые изменения формального параметра отражаются на аргументе [4]. Таким способом можно вернуть результаты из подпрограммы по окончанию ее работы. Например

function Tan(a:real;var d:boolean):real;

Для параметров-констант и параметров-переменных можно не указывать их тип, в этом случае они считаются нетипизированными. Подставляемые на их место аргументы могут быть любого типа, и программист должен самостоятельно интерпретировать типы параметров в теле подпрограммы.

Источник

Процедуры, подпрограммы и функции

Через список параметров осуществляется связь между вызывающей и вызываемой процедурами. Параметр:

  • описывается при объявлении процедуры;
  • представляет собой переменную.

Значение, которое будет подставлено вместо параметра при вызове процедуры, называется аргументом. Передаваемые аргументы являются позиционными, т.к. своей позицией в списке каждый аргумент должен показать, какой параметр он заменяет.

В качестве аргументов процедуре можно передать значения переменных, выражения, константы или массивы, но обязательно тип передаваемого аргумента должен соответствовать типу параметра или корректно преобразовываться к нему.

Для первых пяти натуральных чисел рассчитать квадрат и куб числа ( рис. 7.2).

Основная процедура Proc_param организует цикл на пять чисел и вызывает процедуру Proc_print для распечатки в окне Immediate самого числа, его квадрата и куба.

Пример основной и вызываемой процедуры для расчета куба и квадрата числа

При вызове процедуры происходит передача аргумента i , который используется в Proc_print уже как значение формального параметра fi . Типы переменных i и fi совпадают.

Call Proc_print (i) — альтернативная запись вызова процедуры.

  • Идентификаторы аргументов и параметров процедуры могут совпадать.
  • Не имеет смысла в качестве аргументов передавать глобальные переменные, так как их значения доступны любой процедуре проекта.

Синтаксис описания каждого параметра процедуры имеет следующий вид:

  • Optional — ключевое слово. Указывает, что параметр может быть опущен.
  • Необязательные параметры всегда размещаются в конце списка.
  • Тип необязательного параметра — Variant .
  • При наличии необязательного параметра в процедуре необходимо предусмотреть использование значения по умолчанию, если значение аргумента не задано.
  • В процедуре можно проверить, передается необязательный параметр или нет, используя функию IsMissing(argname) . Она возвращает значение True , если значение параметра опущено, и False — в противном случае.
  • ByVal 1 Указывается одно из двух ByVal или ByRef. — передача параметра по значению. Предполагается, что при вызове процедуры передается только значение переменной и, следовательно, в процессе выполнения процедуры оно не может быть изменено. Используйте этот способ передачи аргументов, чтобы избежать случайной модификации передаваемых данных.
  • ByRef 2 Указывается одно из двух ByVal или ByRef. — передача параметров по ссылке. Предполагается, что процедуре передается адрес переменной . В этом случае вызывающая процедура может не только использовать переданное значение переменной, но и изменить его в процессе выполнения. Используется по умолчанию.
  • ParamArray означает передачу необязательного аргумента — массива типа Variant с неопределенным количеством элементов.
Читайте также:  Диета минус 60 меню на каждый день рецепты отзывы

Ключевое слово ParamArray

  • используется только для последнего параметра процедуры;
  • позволяет задавать произвольное количество передаваемых аргументов;
  • не допускает использование ключевых слов ByVal , ByRef и Optional для описываемого параметра.
  • Varname — идентификатор переменной .
  • type — тип передаваемого аргумента. Если тип данных не указан, то VBA трактует аргумент как Variant .
  • Разрешены все элементарные типы данных и типы, определенные пользователем.
  • Aргумент типа String должен иметь переменную длину.
  • Если для параметра процедуры описан тип данных, то передаваемый аргумент должен иметь тот же тип данных.
  • Если параметром процедуры является массив, то передаваемый массив должен иметь ту же размерность.

Нарушение одного из перечисленных условий может вызвать ошибку выполнения. Определение типа передаваемого значения позволяет повысить эффективность программы и избежать ошибок, связанных с неверно переданным аргументом.

  • Value on default — для необязательных аргументов устанавливает значение по умолчанию.

В качестве передаваемых аргументов можно использовать выражения. Значение выражения вычисляется, преобразуется к корректному типу аргумента, результат временно сохраняется, а процедуре передается адрес этого временного хранилища. Очевидно, что в этом случае происходит передача аргумента по значению — ByVal .

Для сотрудников фирмы (максимально 2000 сотрудников) рассчитать выплаты в соответствии с количеством отработанных часов и ставкой оплаты за час работы. Налог составляет 13%. Если зарплата превышает 300$, то страховой взнос составляет 5%.

Процедура salary_employee (основная) запрашивает ввод количества отработанных часов и размер почасовой оплаты максимально для 2000 сотрудников и передает по значению эти данные в процедуру salary_em_proc .

Вызываемая процедура salary_em_proc рассчитывает и распечатывает денежную выплату. В вызываемой процедуре salary_em_proc определены три параметра. Это io — код сотрудника, ho — количество часов, ra — ставка почасовой оплаты.

Передача аргументов по значению

Изменим задачу, чтобы показать способ передачи аргументов по ссылке. Пусть дополнительно в вызываемой процедуре будет рассчитываться суммарная выплата, значение которой в измененном виде будет доступно основной процедуре.

В основной процедуре salary_employee объявите переменную AC ( Dim AC as Double) , в которой будет накапливаться суммарная выплата. В вызываемой процедуре введите четвертый параметр SI — накапливаемая сумма. Этот параметр передается по ссылке, т.к. его значение изменяется в вызываемой процедуре. Оператор вызова процедуры будет выглядеть так: salary_em_sum id, h, r, AC .

Передача аргумента по ссылке (параметр SI)

Возврат значения функции

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

Если значение явно не присваивается, то оно устанавливается по умолчанию в соответствии с типом возвращаемого значения: 0 — для числовых типов, строку нулевой длины — для строковых переменных, Empty — для типа Variant и Nothing — для ссылок на объекты.

Если тип возвращаемого функцией значения зависит от обстоятельств, то используйте для возвращаемого значения тип Variant .

Функция возвращает количество выделенных ячеек, если тип выделения — объект Range (подробно об объекте Range см. «Объекты MS Excel» ). Если выделен объект другого типа, например, встроенная диаграмма или рисунок, то возвращаемое значение — символьная строка с сообщением о некорректности выделения.

Для присвоения значения функции записаны два оператора. Условия , при которых эти операторы выполняются, взаимно исключают друг друга, поэтому установка значения функции происходит только один раз.

В вызывающей процедуре вычисленное функцией значение сохраняется на активном листе в ячейках D1 (количество ячеек в интервале A1:C5 ) и D2 (сообщение о некорректности выделения).

Пример сохранения вычисленного функцией значения на активном листе

Использование процедур-функций на рабочем листе

Созданные пользователем функции можно использовать не только в процедурах VBA, но и на рабочем листе MS Excel как обычные встроенные функции.

Читайте также:  Как посмотреть результаты анализов пцр

При построении формулы с помощью мастера функций пользовательские функции можно найти в категории Определенные пользователем (User Defined).

Создать функцию расчета выплат, учитывая, что налог составляет 13% и, если зарплата превышает 300 $, то в страховой фонд дополнительно взимается 5%.

В отличие от процедуры salary_em_proc функция salary_em_ возвращает рассчитанное значение. Возврат значения происходит при помощи операторов присваивания, в которых слева используется имя функции . В вызывающей процедуре salary_employee вместо оператора вызова процедуры salary_em_proc io, h, r записан оператор, распечатывающий рассчитанную выплату как MsgBox io & » salary » & salary_em(h, r) .

Пример высвечивания в диалоге значения, вычисленного функцией

Функцию salary_em_ можно использовать как в процедурах VBA, так и на рабочем листе, как пользовательскую функцию.

На рис. 7.7 в ячейку E3 введены отработанные часы, а в ячейку F3 — ставка оплаты за час. В ячейке G3 рассчитана выплата по формуле =salary_em_(E3;F3) .

Источник

Модуль 3. Урок 2. Аргументы и результаты работы методов. Рефакторинг. — Введение в Java

Из чего состоит метод — было рассказано в предыдущем уроке. Углубимся в некоторые детали.

Аргументы методов.

Часто аргументы называют параметрами метода.

Аргументы метода — это те данные, с которыми метод будет работать. Они могут быть любого типа.

Уверен, Вы подметите, что метод может работать и с полями класса. Но поля класса видны всем остальным членам класса, а аргументы текущего метода видны только в рамках тела этого метода.

Рассмотрим на таком примере:

В данном примере, метод printExternalMessage видит обе ссылки с именем message : поле класса и собственный аргумент. Ввиду коллизии имен приходиться использовать ключевое слово this , чтобы явно указать ссылку, к которой обращаемся в коде.

Метод printInternalMessage видит ссылку с именем message только как поле класса Foo . Но ничего не знает о ссылке с именем message , которая находится внутри метода printExternalMessage . Как и о любых других локальных ссылках, которые могут быть объявлены в методе printExternalMessage .

Сколько у метода может быть аргументов?

Аргументов у метода может быть разное количество. Минимально — ноль. Такой метод ничего не принимает на вход. Обычно аргументы метода перечисляются через запятую: void methodName(Type1 arg1, Type2 arg2, int a, int b) . Особенно если они разных типов.

У метода может быть переменное число аргументов. То есть, когда один и тот же метод может принимать то один, то два, то десять аргументов. Но эти аргументы должны быть строго одного типа! Обозначается это так: void methodName(Type1. argsName) . Благодаря этому можно создать, например, метод sum который суммирует любое количество чисел (в пределах возможностей компьютера и типа int ):

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно.

Источник

Объявление типов данных для аргументов функции

В строке 1 содержится объявление функции LenTrim,которое начинается с обязательного ключевого слова Function. После имени функции открываются круглые скобки, что указывает VBA на начало списка аргументов. Далее следует имя аргумента (tStr). Имя аргумента сообщает VBA, что функции-процедуре при ее вызове должен передаваться один аргумент.

Строка 2 функции LenTrim – это строка, которая выполняет всю работу функции и также содержит аргумент функции для LenTrim. При вычислении выражения Len(Trim(tStr)) VBA принимает строку, полученную посредством аргумента tStr, и передает ее VBA-функции Trim для удаления начальных или конечных пробелов. Результат функции Trim используется как аргумент функции Len. Затем VBA присваивает результат функции Len имени функции LenTrim. LenTrim возвращает длину строки аргумента, исключая начальные или конечные пробелы.

Наконец, в строке 3 функция заканчивается ключевыми словами Еш Function. После выполнения этой строки VBA возвращается к оператору процедуры, вызвавшему функцию LenTrim, и вставляет результат функции LenTrim в этот оператор в том месте, где появляется имя функции.

Читайте также:  Инструмент для заработка на футбольных ставках

Для вызова функции LenTrim, используется оператор, подобный следующему:

MsgBox LenTrim(» Excel 2000 «)

В этом операторе строка аргумента имеет четыре начальных и четыре ко нечных пробела, и длина строки (как указывает VBA-функция Len) равна 18 символам. Функция LenTrim сообщает длину строки без начальных и конечных пробелов; вышеуказанный оператор отображает число 10.

Аргументы с определенными типами используются по тем же причинам, по каким используются типизированные переменные или результаты функции. Определение типов аргументов для функции-процедуры помогает пользователю при вызове функции вводить аргументы правильного типа в правильном порядке. Синтаксис элемента Arglist:

[Optional] [ByVal | ByRef] [ParamArray] имяПеременной_

[As тип] [= поУмолчанию]

Optional – ключевое слово, указывающее, что аргумент не является обязательным. При использовании этого элемента все последующие аргументы, которые содержатся в списке Arglist, также должны быть необязательными и описаны с помощью ключевого слова Optional;

Function Name (tstr As String, Optional nChar As Long) As String

ByVal – указывает, что этот аргумент передается по значению;

ByRef – указывает, что этот аргумент передается по ссылке. Описание ByRef используется в VBA по умолчанию;

ParamArray – ключевое слово ParamArray позволяет задавать произвольное количество аргументов. Оно не может быть использовано со словами Byval, ByRef или Optional.

= поУмолчанию – значение аргумента по умолчанию.

Для объявления определенных типов аргументов функции-процедуры, используется ключевое слово As, за которым следует имя нужного типа данных после имени аргумента в списке аргументов.

Пример 2. Определение типа данных аргумента функции LenTrim

Function LenTrim(tStr As String) As Long

Источник



Параметры и аргументы процедуры (Visual Basic)

В большинстве случаев для процедуры требуются некоторые сведения о обстоятельствах, в которых она была вызвана. Процедура, выполняющая повторяющиеся или общие задачи, использует разные сведения для каждого вызова. Эти сведения состоят из переменных, констант и выражений, которые передаются в процедуру при ее вызове.

Параметр представляет значение, которое процедура предполагает указать при ее вызове. В объявлении процедуры определяются ее параметры.

Можно определить процедуру без параметров, один параметр или несколько. Часть определения процедуры, указывающая параметры, называется списком параметров.

Аргумент представляет значение, указываемое в параметре процедуры при вызове процедуры. Вызывающий код предоставляет аргументы при вызове процедуры. Часть вызова процедуры, указывающая аргументы, называется списком аргументов.

На следующем рисунке показан код, вызывающий процедуру safeSquareRoot из двух различных мест. Первый вызов передает значение переменной x (4,0) в параметр number , а возвращаемое значение в root (2,0) присваивается переменной y . Второй вызов передает литеральное значение 9,0 в number , а затем присваивает возвращаемое значение (3,0) переменной z .

Тип данных параметра

Тип данных для параметра определяется с помощью As предложения в его объявлении. Например, следующая функция принимает строку и целое число.

Если параметр проверки типов (оператор Option строго) является Off, As предложением необязательным, за исключением того, что если какой-либо параметр использует его, все параметры должны использовать его. Если проверка типа имеет значение On , As предложение является обязательным для всех параметров процедуры.

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

Указывайте только аргументы с типами данных, которые расширяются до типа данных параметра;

Задайте значение Option Strict Off , разрешающее неявные сужающие преобразования;

Используйте ключевое слово преобразования для явного преобразования типа данных.

Параметры типа

Универсальная процедура также определяет один или несколько параметров типа в дополнение к обычным параметрам. Универсальная процедура позволяет вызывающему коду передавать различные типы данных при каждом вызове процедуры, чтобы можно было адаптировать типы данных к требованиям каждого отдельного вызова. См. раздел Generic Procedures in Visual Basic.

Источник