Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Информатика_Семестр2_Лекции / Информатика_2 семестр_Тема 06_Функции

.pdf
Скачиваний:
21
Добавлен:
05.06.2015
Размер:
479.75 Кб
Скачать

Университет машиностроения

Кафедра «Автоматика и процессы управления»

Дисциплина

Информационные технологии

2 семестр

Тема 06

Функции и процедуры

(Язык VBA for Ms Excel)

Информатика. 2 семестр. Тема 06. Функции

(рекурсия)
(скрытие реализации)

Иногда часть кода можно использовать

несколько раз…

(подпрограммы)

 

Очень часто несколько копий кода различаются

только именами переменных…

(аргументы)

Как правило есть большие фрагменты кода, которые выполняют просто описываемое действие…

Бывают случаи когда нужно повторить действия с изменённым набором параметров…

Информатика. 2 семестр. Тема 06. Функции

Определения

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

GoSub МеткаПодпрограммы

* * *

МеткаПодпрограммы: Statements

Return

Процедура – особый вид функции, не возвращающий значение.

Sub ИмяПроцедуры( Аргументы )

Statements

End Sub

Вызов процедуры: Call ИмяПроцедуры( x )

Информатика. 2 семестр. Тема 06. Функции

Отображение:

«Подпрограмма»

п/п

Предопределенный

процесс

Go(x)

Определения

Отображение:

 

Функция – специально организованный набор

Предопределенный

инструкций, который может быть запущен с

процесс (функция)

использованием имени функции, и возвращающий

 

 

 

итоговое значение, используемое в месте её вызова

 

 

 

Function ИмяФункции( Аргументы ) As ТипРезультата

Go(x)

Statements

 

 

 

 

 

 

 

 

ИмяФункции = Expression

‘ Результат функции

 

 

End Function

 

 

 

 

Вызов функции:

y = ИмяФункции( x )

 

 

алгоритм

функция

основной (main)

вычислитель

 

y = f(x)

 

 

x+1 → ret.

 

 

 

 

 

Информатика. 2 семестр. Тема 06. Функции

Последовательность выполнения

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

стек

x

z

 

Function F (A, B As Integer) As Integer

 

 

 

 

 

 

 

Dim C, D As Integer

y

 

f ()

Псевдокод для y = F ( x, z ):

 

 

 

результат

 

1

Зарезервировать место под результат

параметр B ( z )

2

Зарезервировать место для аргументов

параметр A ( x )

3 Скопировать значения аргументов

адрес возврата

 

 

лок. перемен. D

4

Выделить место под локальные переменные

лок. перемен. C

5

Подготовить запуск функции

копия регистров

6

Выполнить код функции и получить результат

 

 

 

 

 

 

F = A + B + C + D ‘ return result

резерв стека

7

Скопировать результат, очистить стек и память

 

8

Использовать результат для вычисления y

Результат выполнения кода функции используется в основном коде

Информатика. 2 семестр. Тема 06. Функции

Способы передачи параметров

В VBA параметры в функции и процедуры можно передавать

по-значению (byVal) либо по-ссылке (byRef)

По-значению (byVal)

y

x

z

f ()

 

 

значение функц.

B: значение из z

A: значение из x

адрес возврата

лок. перемен. D

лок. перемен. C

копия регистров

резерв стека

 

По-ссылке (byRef)

Копируются значения

y

x

z

 

Сохраняются ссылки

 

 

f ()

 

 

 

 

 

 

 

A = 1

 

 

значение функц.

 

 

 

 

 

 

 

 

 

@B: адрес для z

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Работа с

 

 

@A: адрес для x

Работа через

 

 

«копиями»

 

адрес возврата

 

 

ссылки с

 

 

 

 

 

 

 

 

лок. перемен. D

 

 

 

 

 

исходными

 

 

 

 

 

 

 

 

лок. перемен. C

 

 

 

 

 

ячейками

 

 

 

 

 

 

копия регистров

 

 

 

 

«Копии»

 

 

 

 

 

 

 

удаляются

 

 

резерв стека

 

 

 

 

 

 

 

 

 

 

 

 

По-умолчанию в VBA параметры передаются по-ссылке – так быстрее

Информатика. 2 семестр. Тема 06. Функции

Области видимости и экранирование имён

В VBA функция скрывает свои переменные от «внешнего кода» и экранирует имена «внешних объектов» если они совпадают с локальными переменными и именами параметров

A x z

B C D

результат

параметр B ( z )

параметр A ( x )

адрес возврата

лок. перемен. D

лок. перемен. C

копия регистров

резерв стека

Dim A, B, C, D, X, Z As Integer

Y = F ( X , Z )

Function F ( A , B As Integer) As Integer

Dim C, D As Integer

C = A + X ‘ equal X + X

D = B + Module1.B ‘ equal Z + B

F = A + B + C + D ‘ only internal variables

Хорошим тоном считается написание кода функций с использованием только имён локальных переменных и параметров

Информатика. 2 семестр. Тема 06. Функции

Повторное использование кода Библиотеки функций

Если функция не зависит от «внешних» объектов, её можно вызвать из другого модуля или вынести в отдельный модуль (если она видна)

MainModule

y = f(x)

LibModule

function f()

 

 

k = f(z)

 

 

 

 

 

 

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

Такой модуль – это аналог

f1(x)

f2(z)

статического класса

Принцип ООП:

 

Инкапсуляция – скрытие «реализации»

Информатика. 2 семестр. Тема 06. Функции

 

«Расширенные» возможности параметров

В VBA структуры (переменные пользовательских типов – Type) могут использоваться в качестве параметров и результатов функций

Function F ( A, B As NewType) As OtherType Dim Res As OtherType

…smth statements…

F = Res ‘ В VBA нельзя напрямую управлять результатом

End Function

В VBA допускается использование необязательных аргументов

Function F ( Optional S As String = “Default”) As String

…smth statements…

F = S ‘ При вызове функции можно не указывать аргумент

End Function

ВVBA можно указывать аргументы по имени при вызове функции

Res = F (S := “Hello World”) ‘ Если опциональных аргументов несколько

ВVBA можно создавать функции с переменным числом аргументов

Function F (S As String, ParamArray OtherArgs() ) As Integer

F = OtherArgs(1) + OtherArgs(2) ‘ Желательно использовать UBound

Информатика. 2 семестр. Тема 06. Функции

«Полезные» диалоговые функции

Для немедленного сообщения пользователю используется MsgBox

MsgBox (Prompt [, Buttons] [, Title] [, HelpFile, HelpContext])

Res = MsgBox(“Шеф, всё пропало”, vbOKOnly, “Окно ошибки”)

‘ MsgBox возвращает код кнопки как целочисленную константу (vbOK = 1)

Для срочного получения данных от пользователя используется InputBox

InputBox (Prompt [, Title] [, Default] [, XPos] [, YPos] [, HelpFile, HelpContext])

Res = InputBox(“Введите X”, “Запрос данных”, 10)

И ещё кое-что о функциях в VBA:

Функции можно вызывать как процедуры: Call MyFunc(“Hello”)

Функции можно применить как операторы: MyFunc “Hello”

Если Function MyFunc (S As String ) As Variant

Информатика. 2 семестр. Тема 06. Функции