Масиви

Змінні – це, образно кажучи, шматочки пам’яті, де зберігаються дані. Отже, якщо ми ефективно використовуємо змінні - ми ефективно використовуємо пам’ять. А якщо ми ефективно використовуємо пам’ять - то пам’яті для реалізації додатка потрібно менше і додаток працює швидше. Отже для того, щоб ці дані використовувати з максимальною ефективністю, і в той же час з легкістю, були придумані “масиви” (Arrays), “записи” (Types) і “перерахування” (Enums).

Давайте для початку розглянемо поняття масиву:

Масиви

Їх ще називають списками. Отже що ж таке масиви?

Масив (вектор) - це набір однотипних змінних, об’єднаних одним ім’ям і доступних через це ім’я і порядковий номер змінної в наборі. Кількість елементів масиву теоретично може бути нескінченною, обмеження накладаються конкретною мовою програмування та операційною системою. Елементи масиву мають безперервну нумерацію певного діапазону.

У програмуванні масиви використовуються досить часто. Наприклад, вам потрібно завантажити в програму вміст якого-небудь файлу. Якщо цей файл строковий, то можна використовувати рядок і обійтися без масиву. А от якщо файл бінарний (двійковий), то без масиву просто не обійтися!

У Visual Basic масиви визначаються в такий спосіб:

        Dim myArray(10) As Long

Як Ви вже могли помітити, визначення масиву відрізняється від визначення звичайної змінної тільки індексом, зазначеним у дужках. Цей індекс вказує розмірність масиву. У даному випадку масив myArray буде містити 11 елементів. Чому 11? Тому що нижня границя масиву починається з нуля  [0,1,2.....9,10]. Щоб задати певну розмірність можна використовувати зарезервоване слово To:

        Dim myArray (5 To 10) As Long

Тут визначається масив, розмірність якого 6 елементів (5,6,7,8,9,10).

Загальний синтаксис визначення масиву наступний:

        Dim назваМасиву (почІндекс To кінІндекс) As ТипДаних

Багатомірні масиви

Масиви можна робити багатомірними. Наприклад, оголосимо масив - таблицю поля шахівниці:

        Dim chessTable (1 To 8, 1 To 8) As String

Цей масив являє собою таблицю з восьми осередками по вертикалі і горизонталі.

Отже, масив визначений. Тепер необхідно довідатися - як же можна добратися до елементів цього масиву. Дуже просто! До елементів масиву потрібно звертатися по індексу, приміром, щоб змінити нульовий елемент масиву myArray потрібно написати:

        myArray(0) = 1234

Або, наприклад:

        chessTable(2, 3) = "Пішак"

Масиви змінної розмірності (динамічні)

Динамічні масиви - це такі масиви, розмірність яких може мінятися в ході роботи програми.

Мабуть динамічні масиви використовуються навіть частіше статичних. Розглянемо характерний приклад використання такого масиву. Нехай у нас є процедура, яка завантажує вміст двійкового файлу в масив. Масив ми можемо визначити так:

        Dim fileContent(119) As Byte

Але це якщо файл має довжину 120 байт. А що робити, якщо ми не знаємо довжину файлу, який завантажується? Визначати дуже великий масив, щоб уже напевно туди міг поміститися великий файл? Ні, так робити не можна. Саме в такій ситуації і потрібно використовувати динамічний масив. Visual Basic надає досить потужні засоби для роботи з такими масивами. Визначається такий масив в наступний спосіб:

        Dim myArray() As Byte

На відміну від масивів статичних розмірів, коли звертатися до елементів можна відразу після його оголошення, до елементів динамічного масиву відразу звертатися не можна, тому що вони ще не ініціалізовані. Для початку потрібно вказати його нову розмірність. Для цього Visual Basic має оператор ReDim. Працює він у такий спосіб:

        ReDim myArray(4)

Такий масив myArray має одну розмірність з індексами від 0 до 4 (тобто всього 5 елементів).

Тепер до такого масиву можна звертатися точно так само, як і до статичного. Якщо надалі виникне необхідність знову змінити розмірність масиву, можна ще раз використати ReDim.

Але, - тут є підводний камінь! Давайте розглянемо маленький приклад:

        Dim myLong As Long

        Dim myArray() As Long ' оголошуємо масив

        ReDim myArray(2) ' одна розмірність [0,1,2]

        myArray(1) = 234 ' привласнюємо другому елементові чило 234

        myLong = myArray(1) ' зберігаємо його в змінної myLong

        ReDim myArray(3) ' знову змінюємо тепер [0,1,2,3]

        myLong = myArray(1) ' знову намагаємося зберегти другий елемент

На останньому рядку, змінній myLong буде привласнено значення 0 замість 234! Це відбувається тому, що оператор ReDim заново ініціалізує (скидає) всі елементи масиву до значення за замовчуванням (як пам'ятаєте, для чисел - це 0, для рядків ""). Але як же бути, якщо ми хочемо змінити розміри масиву, зберігши всі старі елементи? Для цього потрібно після оператора ReDim поставити слово Preserve. Приблизно так:

        ReDim Preserve myArray(3) ' зберігаємо старі елементи

        myLong = myArray(1) ' усе в порядку

Тепер усе в порядку.

Поради

Масиви можуть зберігатися в змінних типу Variant. Іноді це буває зручним. У деяких випадках без цього просто не обійтися! (Наприклад, коли Ви хочете, щоб ваша функція повертала масив). Щоб зберегти який-небудь масив у змінній типу Variant необхідно просто привласнити цій змінній потрібний масив:

        Dim myVariantArray ' змінна Variant за замовчуванням

        myVarianrArray = chessTable

Зверніть увагу, ніякі індекси вказувати не потрібно! Тепер можна використовувати копію як звичайний масив:

        myVarianrArray (0) = “Це копія”

Якщо Вам буде потрібно в коді програми довідатися поточні розміри масиву, то можна використовувати вбудовані функції Visual Basic - LBound і UBound. Перша функція повертає нижню границю масиву, друга верхню.