![]() |
![]() |
![]() |
Цикл For-Each
Содержимое
массива часто перебирается в цикле
от 0 до UBound(массив), однако вы также
можете воспользоваться
конструкцией For-Each. Синтаксис For-Each
выглядит следующим образом:
For Each
переменная In массив
[команды]
[Exit For при
необходимости]
[команды]
Next
Конструкция For-Each
универсальна и может
использоваться в тех случаях, когда
структура данных поддерживает
итеративный перебор элементов. За
подробностями обращайтесь к главе 4.
Microsoft
утверждает, что применение For-Each не
будет приводить к существенному
снижению быстродействия по
сравнению с For-Next (как это было в VB6).
Массивы не
ограничиваются одним измерением.
Допустим, вы хотите сохранить
таблицу умножения в матричном виде.
Примерное решение может выглядеть
так:
Dim mulTable(11.11) As Integer
' Создает массив 12x12
Dim i As Integer, j As Integer
For i = 0 To 11
For j = 0 To 11
mulTable(i.j) = (i+l)*(j+l)
Next j
Next i
Размеры
массивов в VB .NET могут изменяться, но
количество измерений должно
оставаться постоянным.
Многомерный
массив с неопределенным
количеством элементов объявляется
при помощи запятых. Следующий
пример показывает, как объявить
трехмерный массив:
Dim salesByDivision(
, , ) As Decimal
Команда ReDim
задает или изменяет количество
элементов в каждом измерении, но
размерность массива не изменяется.
При
сохранении содержимого массива
командой ReDim Preserve допускается
изменение количества элементов
только в последнем измерении
массива.
Раньше выбор
между процедурой (Sub) и функцией (Function)
определялся простым критерием:
если вы собирались использовать
возвращаемое значение, следовало
выбирать функцию, а если нет —
процедуру. Мы рекомендуем
придерживаться этой модели, хотя
ничто не мешает проигнорировать
возвращаемое значение функции. В
объектно-ориентированных
программах функции и процедуры
обычно включаются в классы и
называются методами.
В VB .NET, как и во
многих языках программирования,
существуют два способа передачи
параметров функциям и процедурам: передача
по ссылке и передача по
значению. Когда параметр
передается по ссылке, его изменения
внутри функции приведут к
изменению исходного аргумента
после выхода из функции. По
умолчанию в VB .NET параметры
передаются по значению (а в VB6 — по
ссылке).
Было бы
наивно полагать, что при передаче
по значению исходный аргумент
после выхода из функции всегда
сохраняет прежнее значение. В VB .NET
состояние объекта может измениться
даже в том случае, если он
передавался по значению. В главе 4
эта ситуация, часто приводящая к
возникновению хитроумных ошибок,
рассматривается более подробно.
Чтобы создать
новую функцию или процедуру в окне
программы, установите курсор за
пределами других процедур и
функций и начинайте вводить
заголовок процедуры или функции.
Как только вы нажмете клавишу Enter,
редактор IDE автоматически создаст
команду End правильного типа (End Functi on
или End Sub). Ниже приведен заголовок
функции, которая получает целый
параметр по значению и возвращает
логическую величину (True или False) в
зависимости от того, принадлежит ли
переданный параметр интервалу от 1
до 10: Function IsBetweenlAnd10(ByVal num As Integer) As
Boolean
В режиме
жесткой проверки типов (Option Strict) при
объявлении функции необходимо
указывать тип возвращаемого
значения (в нашем примере — Boolean).
Полный текст
модуля с функций Is Between lAnd 10
приведен ниже. Порядок следования
функций не важен — функция Sub Mai n
может находиться и после
определения функции, которая в ней
используется.
Module Modulel
Function
IsBetweenlAnd10 (ByVal num As Integer) As Boolean
If num >= 1 And num <=10 Then
Return True
Else
Return False
End If
End Function
Sub Main()
Console.
WriteLinedsBetweenlAnd100))
Console. ReadLine()
End Sub
End Module
В VB .NET при
вызове функции или процедуры
непустой список параметров всегда
заключается в круглые скобки, как в
строке с вызовом Console.WriteLine: IsBetweenlAnd100)
Обратите
внимание на ключевое слово Return. При
выполнении команды Return функция
завершается и возвращает значение,
указанное после Return (значение
должно быть определенным —
возвращение аналога voi d не
допускается). Также поддерживается
синтаксис с присваиванием имени
функции, использовавшийся в
прежних версиях VB:
Function IsBetweenlAnd10(ByVal num As Integer) As Boolean
If num >= 1 And
num <= 10 Then
IsBetweenlAnd10 =
True Else
IsBetweenlAnd10= False
End If
End Function
Использование
Return — дело вкуса. Команда Return
нагляднее и проще, но старый
синтаксис оставляет управление
внутри функции, а это иногда бывает
удобно.
Обобщенная
форма определения функции выглядит
следующим образом:
Function имя_функции
(аргумент1, аргумент2, ...) As тип
команды
Return выражение ' или имя_функции = выражение
End Function
где аргумент1 и
аргумент2 — переменные. Имена
функций подчиняются тем же
правилам, что и имена переменных.
При вызове функции VB .NET выполняет
команды, содержащиеся в
определении функции. Значение,
указанное после Return (или последнее
значение, присвоенное имени
функции), определяет результат
вызова.
Хотя
возвращаемое значение обычно
используется в программе, VB также
позволяет вызвать функцию простой
командой вида foo(3) без присваивания.
Обычно
количество аргументов,
передаваемых при вызове функции,
должно совпадать с количеством
параметров в ее определении. Типы
аргументов должны быть совместимы
с типами соответствующих
параметров, при этом автоматически
выполняются только расширяющие
преобразования. Например,
следующий фрагмент допустим,
поскольку преобразование Short в Integer
не приводит к потере данных:
Dim bar As Short = 3
Console.WriteLinedsBetweenlAnd10(bar))
VB .NET позволяет
создавать функции с переменным
числом аргументов. Дополнительная
информация приведена далее в этой
главе.
![]() |
![]() |
![]() |