Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция 05.doc
Скачиваний:
5
Добавлен:
01.05.2025
Размер:
157.7 Кб
Скачать
  1. Процедура типа Function

Процедуры Function в отличие от процедур Sub могут возвращать значение в вызывающую процедуру. Синтаксис Function имеет следующий вид:

[Уровень доступности] Function ИмяПроцедуры(Аргументы) [As Тип]

(операторы)

End Function

В качестве уровня доступности может быть указано: Public, Private, Protected, Friend, Protected Friend.

Процедуры Function, как и переменные, имеют тип, задаваемый ключевым словом As. Если тип процедуры не задан, то по умолчанию ей присваивается тип Object.

Тип процедуры определяет тип возвращаемого ею значения.

"Возвращаемым значением" называется значение, которое функция передаёт обратно в вызвавшую её программу.

Функция может вернуть значение двумя способами:

  • значение присваивается самому имени функции один или несколько раз в процессе выполнения процедуры. Управление и, соответственно, возвращаемое значение, не будет передано в программу, вызвавшую функцию до тех пор, пока не выполнится End Function или Exit Function;

  • с помощью оператора Return (возврат), чтобы определить возвращаемое значение с немедленной передачей управления программе, вызвавшей функцию.

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

Если функция возвращает массив, то внутри этой функции невозможен доступ к отдельным элементам массива.

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

Module Module1

Function Площадь(ByVal A As Single) As Single

Площадь = A ^ 2

End Function

Для вызова функции используется процедура Sub Main().

Sub Main()

Dim Квадрат As Single

Квадрат = Площадь(400)

MsgBox("Площадь квадрата" & " = " & Квадрат)

End Sub

End Module

  1. Процедура типа Property

Эта процедура объявляет имя свойства и включает операторы, используемые для извлечения или сохранения значения свойства, например, оператор Get используется для получения значения свойства, а End Get  завершает определение данного значения.

Синтаксис процедуры:

Property Имя_свойства ([Параметр] ) [As type]

Get

(операторы)

End Get

End Property

Функции аргументов процедур Sub

Пример: Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As_

System.EventArgs) Handles MyBase.Load:

  • фраза ByVal sender As System.Object означает, что контейнер (sender) передаёт в процедуру по значению (ByVal) параметры системного класса System;

  • фраза ByVal e As System.EventArgs означает, что в процедуру передаются по значению (ByVal) параметры e класса обработки событий (System.EventArgs). Параметр e  это какая-то системная функция Windows;

  • фраза Handlesсвидетельствует о том, что выполняется процедура, вызываемая событием, в частности, загрузкой формы MyBase.Load. Если процедура вызывается по имени, то эта фраза отсутствует.

Передача параметров

Переменные, передаваемые процедуре, называются параметрами процедуры. По умолчанию они имеют тип Object. При уточнении типа параметра Visual Basic обеспечивает задание типа параметров с помощью ключевого слова As.

Передача параметров может задаваться двумя способами:

  • по значению (By value);

  • по ссылке (By reference).

В случае передачи в процедуру по значению (оператор ByVal) в качестве переменной передаётся не сама переменная, а её значение.

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

Module Module1

Sub Тест(ByVal A As String, ByRef B As String)

A = "Строка, передаваемая по значению"

B = " Строка, передаваемая по ссылке"

End Sub

Sub Main()

Dim A As String

A = "Привет"

Dim B As String

B = "Здравствуй, мир!"

MsgBox(strA & ", " & strB) 'визуализируются обе локальные переменные

Тест(A, B)

MsgBox(A & ", " & B) 'визуализируется локальная переменная по значению

'и модульная переменная - по ссылке

End Sub

End Module

В модульной процедуре "Тест" объявляется, что переменная A, являющаяся параметром процедуры, передаётся по значению (ByVal), а переменная B  передаётся по ссылке (ByRef).

При выполнении процедуры Sub Main() используются локальные переменные, имеющие те же имена, что и модульные переменные, т. е. в окне сообщения появляется текст: "Привет, Здравствуй, мир!".

Когда же выполняется процедура "Тест"(A, B), вызываемая по имени (как переменная), то переменная A, передаваемая по значению, будет инициализироваться, как и указано: по локальному значению, присвоенному в процедуре Sub_Main(), а переменная B локального значения не принимает, т. к. имеет ссылку на значение, присвоенное в модуле. Таким образом, в случае переменной B возвращается прежнее значение, и в окне сообщения появляется текст: "Привет, Строка, передаваемая по ссылке".