Змінні

У Visual Basic змінні зберігають інформацію (значення). При їхньому використанні Visual Basic резервує область у пам’яті комп’ютера для збереження даної інформації. Кожна змінна має своє ім'я. Воно може досягати 255 символів у довжину, починається завжди з букви, після якої можуть бути інші букви, цифри і знак підкреслення. Регістр символів значення не має.

Існує кілька правил завдання імен змінних:

  • ім'я змінної може містити будь-які літери, цифри і символ підкреслення;
  • перший символ в імені змінної повинен бути буквою або символом підкреслення;
  • в імені змінної повинні бути відсутніми прогалини і знаки пунктуації;
  • ім'я повинно бути унікальним всередині області видимості;
  • ім'я не повинно бути ключовим словом, наприклад, Print.

Примітка

Список обмежень досить великий, щоб знати його напам'ять, але вам завжди допоможе перевірка синтаксису програми, при виконанні якої буде вказано на використання неприпустимих імен.

Приведемо кілька прикладів імен змінних:

  • numOfLetters - підходить
  • 2Bottle - невірно, тому що починається не з букви
  • ThisIsVeryLongName - підходить, довжина 18 символів
  • sng.Cos - не підходить, тому що використовується крапка

Іменування змінних і функцій надзвичайно важлива справа. Я рекомендую дотримуватись угорської угоди:

Тип

Схема іменування

Приклад

Константа

Ім’я константи повинно складатись лише із заглавних літер

HWND_BROADCAST

Змінна

Ім’я змінної повинно починатись лише з маленької літери, а далі наступні слова – з великої

numOfFonts

Функція

Ім’я функції повинно починатись із заглавної літери, далі наступні слова також із заглавної

SetForegroundWindow

Постарайтеся щоб іменування змінних відповідно до такої схеми у Вас увійшло в звичку. Я раджу, але не наполягаю. Не подобається - будь ласка, називайте як Вам завгодно, от тільки так Ви ніколи не станете професійним програмістом. 

Кожна змінна має визначений тип. Всього у Visual Basic 14 основних типів змінних. Крім того, програміст може визначити і свій тип. Перелічимо основні типи змінних VB:

  • Byte - призначений для збереження цілих чисел від 0 до 255. Якщо змінній такого типу привласнити значення, що виходить за ці межі, то Visual Basic згенерує помилку.
  • Integer - призначений для збереження цілих чисел у діапазоні -32768 до +32767, тобто розмір пам’яті, який виділяється під таку змінну складає 2 байти. (256*256=65536). Символ для позначення - "%". 
  • Long - призначений для збереження цілих чисел у діапазоні від -2147483648 до +2147483647, тобто розмір пам’яті, який виділяється під таку змінну складає 4 байти. (65536*65536=4294967296). Символ для позначення - "&".
  • String - призначений для збереження строкової (символьної) інформації, простіше кажучи - тексту. Може зберігати до 2 Гб тексту. Символ для позначення - "$".
  • Single - призначений для збереження дробових чисел, з точністю до 7 цифр. Діапазон негативних значень від -3.402823Е38 до -1.401298Е-45. Діапазон позитивних значень від 1.401298Е-45 до 3.402823Е38. Довжина числа може досягати 38 знаків. Займає 4 байти пам’яті. Обчислення з даними змінними будуть приблизними і менш швидкими, чим із змінними цілого типу. Символ для позначення - "!".
  • Double - призначений для збереження дробових чисел, з точністю до 16 цифр. Діапазон негативних значень від 1.79769313486232Е308 до -4.94065645841247Е-324. Діапазон позитивних значень від 4.94065645841247Е-324 до 1.79769313486232Е308. Довжина числа може досягати 300 знаків. Займає 8 байтів пам’яті. Обчислення з даними змінними будуть приблизними і менш швидкими, чим із змінними цілого типу. Використовується для наукових розрахунків. Символ для позначення - "#".
  • Currency - Даний тип створений для того, щоб уникнути помилок при перетворенні чисел з десяткової форми в двійкову і навпаки (Неможливо представити 1/10 як суму 1/2, 1/4 і т.д). Даний тип може мати до 4 цифр після коми, і до 14 перед нею. Усередині даного діапазону обчислення будуть точними. Обчислення виконуються так само повільно, як і у випадку змінних Single і Double. Даний тип дуже добре підходить для фінансових розрахунків. Символ для позначення - "@".
  • Date - Цей тип даних дозволяє зберігати значення часу і дати в проміжку від напівночі 1 січня 100 року до напівночі 31 грудня 9999 року. Якщо змінній присвоюється тільки значення дати, то час дорівнює 00:00.
  • Boolean - дуже важливий і розповсюджений тип даних. Дозволяє зберігати так звані булеві значення, тобто тільки два значення - True і False. (українською - Правда і Неправда). Використовується тоді, коли Вам потрібно зберігати тільки значення Так чи Ні.
  • Variant - Змінна типу Variant може містити дані будь-якого типу. Visual Basic автоматично робить необхідні перетворення даних, тому не варто турбуватися про це. Використання такого типу даних сповільнює роботу програми, тобто потрібен час і ресурси для перетворення типів. Тому рекомендую завжди утримуватися від застосування цього типу даних, за винятком специфічних випадків, наприклад, повернення функцією масиву можливо тільки при використанні типу Variant

У Visual Basic змінні оголошуються за допомогою оператора Dim, після якого проставляється As та Ім’я_Типу змінної. Наприклад:

 Dim a As Long

Dim b As Byte

Dim c As Long

Dim numOfLetters As Long

Dim myString As String

Dim isLoaded As Boolean

 Якщо не вказувати As Ім’я_Типу, то змінна буде оголошена як Variant.

Після оголошення змінної їй привласнюється значення за замовчуванням.

  • Для рядка це - "" (порожній рядок).
  • Для чисел - 0.
  • Для Boolean - False.

Змінна може бути використана відразу після оголошення.

Змінні можна повідомляти й в одному рядку, розділяючи оголошення двокрапкою:

 Dim a As Long : Dim b As Integer

Тут дуже важливо помітити наступну особливість. Логічно було б оголосити 3 змінні типи Long у такий спосіб:

Dim a, b, c As Long

 Така звичка могла перейти, наприклад, з мови C. Там усі змінні дійсно мали б той тип, що зазначений після останньої змінної. Але не в Visual Basic! У результаті такого оголошення Visual Basic оголосить 3 змінні, перша і друга будуть мати тип Variant, і тільки третя - Long!

Запам’ятаєте це! А взагалі, краще повідомляти кожну змінну в окремому рядку. І, якщо необхідно, те логічно відокремити ці оголошення можна просто вставивши порожній рядок між тими оголошеннями, що ви хочете відокремити логічно. Наприклад, так:

Dim a As Long

Dim b As Long

 

Dim myString1 As String

Dim myString2 As String

Такі логічні пробіли між рядками необхідні для рятування коду від його монотонності.

Привласнити значення змінної можна за допомогою знака дорівнює “=”. Наприклад:

a = 1234567

b = 234

c = 133

myString = "Visual Basic рулить"

isLoaded = True

У даному прикладі змінним привласнювалися константи. Але часто буває необхідно привласнити одній змінній значення іншої. Це робиться в такий спосіб:

a = b

' можна, тому що змінна b “уміщається” у тип Long (234<4294967296)

a = b + c

' тепер у a зберігається сума b + c.

b = c

' теж можливо (133 < 255)

b = a

' не можна, тому що змінна a не укладається у діапазон [0-255]. Відбудеться помилка.

myString = a

' Visual Basic сам перетворить число 1234567 у рядок “1234567”,

'а потім привласнить це значення

' зміннії myString. Також можливо зворотна дія.

isLoaded = True

' все ОК

myString = myString & "однозначно!"

' тут відбувається злиття двох рядків, у результаті чого

' змінна myString містить рядок:

' “Visual Basic рулить однозначно!”.

isLoaded = a

' можливо, тому що Visual Basic сам перетворить тип Long

' у тип Boolean. isLoaded буде містити True.

' Чому не False?

' Тому, що в VB False - це нуль, а будь-яке,

 

' не нульове значення - True

Вище, при описі типів змінних я вказував символ для позначення. Цей символ можна (а іноді і потрібно) використовувати для оголошення змінної, але без використання зарезервованих слів As Тип:

Dim myLongParam&

Dim myString$

Тут оголошені 2 змінні, перша має тип Long, друга - String. Також можна використовувати ці спеціальні символи для явного зазначення типу константам, наприклад:

Call MyProc (myParam1, myParam2, 5&)

Тут, при виклику процедури MyProc, останній параметр має тип Long. Якби ми не вказали значок &, то він (параметр) мав би тип Byte. Це необхідно при використанні API функцій.

Вище я вже відзначав, що  досить часто, непомітно для розробника, займається перетворенням типів змінних автоматично. Приміром, ми розглядали такий приклад:

myString = a

Змінна a має тип Long, а myString - String. Visual Basic сам перетворить змінну a у тип String, а потім привласнить значення змінної MyString. Це необхідно знати. Також, Visual Basic надає у Ваше розпорядження кілька функцій перетворення типів: CLng, CBool, CDate, CStr і т.д. Кожна функція перетворить вираз до відповідного типу. Розглянемо розповсюджену помилку програміста на Visual Basic. Нехай у нас є код типу:

Dim a As Byte

Dim b As Byte

Dim c As Long

a = 200

b = 200

c = a + b

Здавалося б, що якщо запустити такий код на виконання, то в змінній c буде знаходитися значення 400 (200 + 200). Але ні! Visual Basic на рядку c = a + b згенерує помилку Overflow (Переповнення). Справа в тому, що у виразі праворуч від знака дорівнює складаються 2 змінні типи Byte, і Visual Basic вирішує, що після обчислення цього виразу має залишитися той же тип - Byte. Але якщо згадати те, що тип Byte може зберігати значення в діапазоні 0-255, можна зрозуміти чому Visual Basic генерує Overflow (Переповнення). 400 далеко виходить за діапазон Byte... Тут може виникнути питання: “А як же бути? Повідомляти змінні a і b типом Long?”. Можна зробити і так. А можна скористатися функцією перетворення типу CLng. Тоді працездатний код буде виглядати в такий спосіб:

Dim a As Byte

Dim b As Byte

Dim c As Long

a = 200

b = 200

c = CLng(a) + CLng(b)

Усе в порядку, 400 - входить у тип Long!