Структура программы
Программа 20.17. Использование именованных аргументов.
Sub Test2() Dim bookshops(1 To 25) As IntegerDim result As BooleanInit bookshops result = SaleAbility(arr := bookshops, numOfBooks := 3000) MsgBox(result) End SubПри описании синтаксиса объявления процедуры мы вскользь упомянули ключевое слово ParamArray, настало время уделить ему достойное внимание. Возможность передавать процедуре заранее неизвестное число фактических параметров является опять-таки уникальной по отношению ко многим другим языкам программирования.
Например, мы создадим процедуру подсчета общего количества заявок с использованием параметра ParamArray. При вызове этой процедуры в процедуре Tests можно задавать сколько угодно фактических параметров массива заявок.
Программа 20.18. Использование параметра ParamArray.
Sub FullSum(ParamArray arr() As Variant) Dim sum As IntegerFor i = LBound(arr) To UBound(arr) sum = sum + arr(i) Next i MsgBox(sum) End SubSub Test3() FullSum 100, 2000, 350, 450 End SubРассмотрим еще один способ вызова процедур или функций – рекурсивный вызов, т. е. вызов, при котором процедура вызывается из своего же тела. Стандартный пример рекурсивной функции – вычисление факториала.
Программа 20.19. Рекурсивный вызов функции.
Function fCTRL(n As Integer) As VariantIf(n <= 1) Then fCTRL = 1 ElsefCTRL = n * fCTRLfn - 1) End If End FunctionSub Test4() MsgBox fCTRL(20) End SubКак правило, рекурсивными вызовами не стоит злоупотреблять, поскольку при рекурсивных вызовах достаточно быстро заполняется стековая память компьютера и на их обработку тратится гораздо больше времени. В нашем случае можно избежать использования рекурсивного вызова его заменой на обыкновенный цикл. Хотя, безусловно, есть ситуации, когда использование рекурсивных методов заметно ускоряет работу, например при работе с древовидными структурами данных.
В заключение мы рассмотрим пример, показывающий различие между передачей параметров по ссылке и по значению, в котором приведены две процедуры: RefVal и MainCalc. Вспомогательная процедура RefVal использует три формальных аргумента, описанные по-разному. Далее в теле этой процедуры каждый из них увеличивается на единицу, а затем их значения выводятся на экран. Основная процедура MainCalc устанавливает значения переменных а, b и с, а затем передает их в качестве параметров процедуре RefVal. При этом первый параметр передается по ссылке (по умолчанию), второй – по значению, а третий – снова по ссылке. После возврата из процедуры RefVal основная процедура также выводит на экран значения трех переменных, передававшихся в качестве параметров. Всего на экран выводится шесть значений. Сначала это числа 11, 21 и 31 (все полученные значения увеличились на 1 и выводятся процедурой RefVal). Затем это числа 11, 20 и 31 (эти значения выводятся процедурой MainCalc, причем переменные, переданные по ссылке, увеличились, а переменная, переданная по значению, – нет).
— Регулярная проверка качества ссылок по более чем 100 показателям и ежедневный пересчет показателей качества проекта.
— Все известные форматы ссылок: арендные ссылки, вечные ссылки, публикации (упоминания, мнения, отзывы, статьи, пресс-релизы).
— SeoHammer покажет, где рост или падение, а также запросы, на которые нужно обратить внимание.
SeoHammer еще предоставляет технологию Буст, она ускоряет продвижение в десятки раз, а первые результаты появляются уже в течение первых 7 дней. Зарегистрироваться и Начать продвижение
Программа 20.20. Разница между ByRef и ByVal
Sub RefVal(x, ByVal y, ByRef z) x = x + 1 y = y + 1 z = z + 1 MsgBox(x) MsgBox(y) MsgBox(z) End SubSub MainCalc 0 a = 10 b = 20 c = 30 Call RefVal(a, b, c) MsgBox(a) MsgBox(b) MsgBox(c) End SubИтак, мы рассмотрели работу с процедурами и функциями, определяемыми пользователем, но помимо этой возможности, есть широкий набор всевозможных встроенных процедур и функций, позволяющих программисту не задумываться над реализацией стандартных операций, таких как сравнение строк или взятие синуса от некоторого числа. К сожалению, рамки нашей книги не дают возможность описать даже малую часть встроенных процедур и функций (да это и ни к чему), но вы всегда сможете найти их полный перечень и описание во встроенной справке Outlook.
