Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Типи даних






Змінні і типи даних визначають, де і як зберігаються дані в пам'яті комп'ютера. Бажано в VB вказувати типи для кожної змінної перед її використанням. Задаючи тип даних, накладаємо деякі обмеження на величину, що зберігається: як велика вона може бути; скільки розрядів вона може містити і чи може вона містити дробову частину.

У VB є 11 вбудованих типів даних. Вони наведені в таблиці 3.1.

При опису змінною вказівка типу даних може бути опущена. Тип змінної в такому разі визначається останнім символом імені змінної: @, #, %, &,! або $ (Currency, Double, Integer, Long, Single або String, відповідно). Наприклад, оскільки символ $ є символом визначення типа для строкових даних, то змінна під ім'ям texts автоматично стає змінною типа " рядок символів". Надалі цей спеціальний символ вказівки типа даних може бути опушений, проте постійна присутність в імені змінної символу визначення типа нагадуватиме про те, до якого типу даних відноситься ця змінна, що допоможе уникнути помилок використання неспільних типів даних.

 

Таблиця 3.1. Типи даних

№   Тип даних   Розмір (байт) Розрядність (цифр) Діапазон  
  Boolean – логічний     True(1) або False(0)
  Integer – цілий (число із знаком) (Символ визначення типа за умовчанням: %)     мінус 32768 - 32767  
Byte - Число без знаку від 0 до 255     0 - 255  
  Long – цілий подовжений (Символ визначення типа за умовчанням: &)     мінус 2147483648 - - 2147483647
  Single – дійсний (Символ визначення типа за умовчанням:!)     мінус 3, 402823E+38 - - 1, 401298E-45; 1, 401298E-45 - - 3, 402823E+38
  Double – дійсний подовжений (Символ визначення типа за умовчанням: #)     мінус 1, 79769313486232E+308 - -4, 94065645841247E-324; 4, 94065645841247E-324 - - 1, 79769313485232E+308
  Currency - дійсний з фіксованою десятковою крапкою (5-ть знаків) (Символ визначення типа за умовчанням: @)       мінус 922337203685477.5808 - - 922337203685477.5807
  Date - дати     01.01.100-31.12.9999
  String – символьний (Символ визначення типа за умовчанням: $) 1+1     Від 0 до 65535 символів  
  Object – об'єктний     Будь-який певний об'єкт
  Array – набір(масив) Визначається кількістю і розміром елементів
  Variant   Визначається записаними даними Будь-який вбудований тип даних  
           

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

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

Наприклад, не допускається одночасне використання змінних var$ і var%. Не допускається і явне оголошення змінній типа, що вже містить символ визначення типа в кінці імені, за допомогою описувача As < типЗмінної> (навіть якщо таке визначення не суперечить звичайному застосуванню символу визначення типу). Так, наприклад, отримаємо повідомлення про помилку, спробувавши ввести будь-яке з наступних визначень:

Dim var1% As String

Dim var2% As Integer

Для визначення типа даних аргументів процедури або функції використовується опис типа даних безпосередньо в заголовному рядку процедури або функції.

Наприклад, наступний заголовний рядок процедури описує її параметри як змінної строкового типа:

Sub Example(strl As String, str2 As String, str3 As String)

Наприклад, визначення типа даних значення, що повертається функцією завершує заголовний рядок функції:

Function Find_String(strl As String) As Integer

— описує повернене функцією значення, як змінну короткого цілого типа.

Аби програма працювала швидше і займала менше пам'яті, рекомендується використовувати, коли це можливо, конкретні типи змінних, а не універсальний тип Variant. На обробку змінних типа variant потрібна не лише додаткова пам'ять, але і додатковий час: потрібно з'ясувати, до якого конкретного типа даних належить така змінна у момент обробки, а також при необхідності виконати перетворення даних до потрібного типу. Може здатися, що в такому разі краще взагалі не використовувати подібні змінні. Це не так. Часто змінні типа variant просто необхідні: наприклад, у тому випадку, коли точно не упевнені, які саме дані будуть привласнені змінною.

5. Зона дії змінних і процедур

Всі процедури, функції, змінні і константи в VB мають свою область застосування. Це означає, що вони можуть використовуватися лише у визначеному місці програмного коду — саме там, де вони описані.

Наприклад, якщо змінна А описана за допомогою оператора Dim в тілі процедури з ім'ям Proc1, саме ця процедура і є її зоною дії. Якщо є інша процедура Ргос2 в ній не можна використовувати цю ж змінну. Якщо спробувати зробити це, то або сформується повідомлення про помилку із-за використання неописаної змінної (в тому випадку, якщо використовується згадуваний раніше оператор Option Explicit), або просто буде інша змінна — з тим же самим ім'ям, але ніяк не пов'язана з однойменною змінною з першої процедури.

5.1. Визначення зони дії змінних

У якому місці програми і як саме описана змінна, визначає зону її дії і те, як довго вона " живе" в пам'яті і зберігає привласнене нею значення. Є три різні рівні при визначенні зони дії змінних:

· рівень процедури;

· рівень модуля;

· рівень проекту.

Аби визначити змінну на рівні процедури, її опис поміщається в тіло даної процедури, і тоді це буде локальна змінна даної процедури.

Аби визначити змінну на рівні модуля і зробити її тим самим доступною для спільного використання у всіх процедурах даного модуля, слідує розмістити її опис в секції оголошень модуля — перед текстом яких-небудь процедур або функцій. При цьому може використовуватися і явний опис області дії (визначення): замість ключового слова Dim в цьому випадку використовується ключове слово Private. Немає жодної різниці в тому, який з цих описувачів використовується.

Нарешті, аби описати змінну на рівні проекту, необхідно розташувати її опис в секції оголошень одного з модулів проекту і при цьому обов’язково повинно використовуватися ключове слово Public. Описані таким чином зміні можуть використовуватися в будь-якому модулі проекту.

(Зауваження)

Все сказане раніше відноситься і до опису, і до визначення зони дії констант, а також масивів.

5.2. Схема видимості змінних відповідно до об'єктно-орієнтованої моделі контейнерів

Змінні, оголошені в зовнішньому контейнері, доступні процедурам, що входять в цей контейнер (рис. 3.1.). Контейнер – це набір вкладених об’єктів (Проект → модуль → {процедура, функція}).

Рис. 3.1 Схема зони дії змінних

Public – оголошення глобальних змінних. Змінна може використовуватися в будь-якій внутрішній процедурі програми.

Змінні var2, var5, var4 визначені лише для процедур 2, 5, 4 відповідно, var3 – у всіх процедурах Модуля 2, var1 - у всіх процедурах Модуля 1, Var визначена у всіх модулях і процедурах (рівень проекту).

Для змінних є ще один спосіб їх опису, що не змінює їх рівня, але що дозволяє зберегти значення змінної, описаної на рівні процедури, після завершення роботи даної процедури. Для цього слід використовувати описувач static, тим самим визначаючи її як статичну змінну. Така змінна зберігає виділене нею місце в пам'яті і своє значення навіть після завершення процедури, в якій вона була описана і використана.

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

5.3. Зони дії процедур і функцій

Процедури і функції мають лише два рівні зони дії: рівень модуля і рівень проекту. За умовчанням використовується рівень проекту. Таким чином, процедура або функція може бути викликана будь-якою іншою процедурою або функцією в цьому проекті. При описі процедур і функцій на рівні проекту може також використовуватися необов'язкове ключове слово Public. Жодної дії на процедуру наявність або відсутність цього слова не надає.

Якщо потрібно описати процедуру, що використовується лише на рівні модуля, то для цього застосовується ключове слово Private. Такий опис не лише звужує зону дії для процедури, але і забороняє її використання як самостійної процедури — її можна викликати лише з іншої процедури.

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

Розглянемо приклад модуля, що починається таким чином:

Public A1 As String ‘ рівень проекту, змінна А1 символьного типу

Private A2 As Integer ‘ рівень модуля, змінна А2 типу – коротке ціле

Dim A3 As Single ‘ рівень модуля, змінна А2 типу – коротке дійсне число з

‘ плаваючою крапкою

Sub Proc1() ‘ оголошення початку процедури Proc1

Dim A4 As Integer ‘ рівень процедури, змінна А4 типу – коротке ціле

Static A5 As Integer ‘ рівень модуля, змінна А5 типу – коротке ціле

A1 = " Текстовий рядок1" ‘ текстове значення змінної А1

A2 = 2 ‘ присвоєння цілого числа (2) змінної А2

A3 = 3.14 ‘ присвоєння дійсного з плаваючою крапкою числа (3.14) ‘ змінної А3

A4 = A4 + 4 ‘ розрахунок значення змінної А4

A5 = A5 + 5 ‘ розрахунок значення змінної А5

MsgBox A4 ‘ вивід значення змінної А4 у вікні повідомлення

MsgBox A5 ‘ вивід значення змінної А5 у вікні повідомлення

Debug.Print " Proc1: ", " A4="; A4, " A5="; A5 ‘ вивід значення змінних А4, А5

‘ з коментарями (текстом) у вікні відладки

End Sub ‘ оголошення кінця процедури Proc1

Sub Proc2() ‘ оголошення початку процедури Proc2

Proc1 ‘ виклик процедури Proc1з поточного модуля

MsgBox A1 ‘ вивід значення змінної А1 у вікні повідомлення

MsgBox A2 ‘ вивід значення змінної А2 у вікні повідомлення

MsgBox A3 ‘ вивід значення змінної А3 у вікні повідомлення

MsgBox A4 ‘ вивід значення змінної А4 у вікні повідомлення

MsgBox A5 ‘ вивід значення змінної А5 у вікні повідомлення

Debug.Print " 1/Proc2: ", " A1="; A1, " A2="; A2, " A3="; A3, " A4="; A4, " A5="; A5

‘ вивід значення змінних А1, А2, А3, А4 та А5 з коментарями(текстом)

‘ у вікні відладки

Proc1 ‘ виклик процедури Proc1з поточного модуля

Debug.Print " 2/Proc2: ", " A1="; A1, " A2="; A2, " A3="; A3, " A4="; A4, " A5="; A5

‘ вивід значення змінних А1, А2, А3, А4 та А5 з коментарями(текстом)

‘ у вікні відладки

End Sub ‘ оголошення кінця процедури Proc2

В даному прикладі змінна Al визначена на рівні всього проекту (використано ключове слово Public), змінні А2 і A3 визначені на рівні модуля, змінна А4 — лише на рівні процедури Procl, а змінна А5 хоча і визначена у тілі процедури Procl, але описана як статична змінна.

При запуску на виконання процедури Ргос2 станеться наступне: з цієї процедури буде у свою чергу викликана процедура Procl, яка привласнить значення всім п'яти змінним А1, А2, A3, А4 і А5, а потім покаже поточні значення змінних А4 і А5 у вікні повідомлення (MsgBox) та вікні відладки (рис. 3.2), яке включається у VB View → Immediate Window (Debug.Print).

Proc1: A4= 4 A5= 5

1/Proc2: A1=Текстовий рядок1 A2= 2 A3= 3, 14 A4= A5=

Proc1: A4= 4 A5= 10

2/Proc2: A1=Текстовий рядок1 A2= 2 A3= 3, 14 A4= A5=

Рисунок 3.2. Результат роботи процедури Proc2, наведеного приклада програми

Після завершення цієї процедури будуть виведені поточні значення змінних А1 — А5 з процедури Ргос2. При цьому виявиться, що змінні А1 — А3 зберегли свої значення, оскільки вони описані на рівні модуля, а змінні А4 і А5 набувають порожніх значень, оскільки зоною дії цих змінних є процедури, в яких вони використовуються. Жодні зміни цих змінних усередині однієї з процедур не мають відношення до аналогічних змінних з другої процедури — насправді це різні змінні, просто для них використовуються співпадаючі імена.

Потім відбувається ще один виклик процедури Procl, і вона знов починає змінювати і виводити на екран значення змінних А4 і А5. При цьому змінна А4 знов набуде значення 4, оскільки при новому виклику процедури для цієї змінної буде заново виділена пам'ять, і вона заповниться порожнім значенням. На відміну від А4, змінна А5, описана як статична, збереже своє колишнє значення від попереднього виклику цієї процедури, в результаті її значення при повторному виклику стане рівним 10.

Масиви

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

Кількість індексів, що використовуються у масиві також може бути різною. Найчастіше використовуються масиви з одним або двома індексами, рідше — з трьома, ще більша кількість індексів зустрічається украй рідко. У VB допускається використовувати до 60 індексів. Про кількість індексів масиву зазвичай говорять як про розміри масиву. Масиви з одним індексом називають одновимірними, з двома — двовимірними і так далі. Масиви з великою кількістю вимірів можуть займати дуже великі об'єми пам'яті, тому слід бути обережними в їх вживанні.

Перш ніж використовувати масив, потрібно обов'язково оголосити його за допомогою оператора Dim і вказати при цьому типи значень, що зберігаються в масиві. Всі значення в масиві зобов'язані належати до одного типа даних. Це обмеження на практиці можна обійти, використавши при оголошенні масиву тип Variant — в цьому випадку елементи масиву зможуть набувати значень різних типів. Синтаксис оператора оголошення масиву наступний:

Dim < ім'яМасиву> (< розмір1>, < розмір2>,...) As < типДаних>,

де вказані в дужках величини < розмір1 >, < розмір2 > задають розміри масиву — кількість індексів і максимально допустиме значення для кожного конкретного індексу. При цьому індексування елементів масиву за умовчанням починається з нуля. Наприклад,

Dim Array1(9) As Integer ‘ визначає одновимірний масив з 10 елементів,

‘ які є змінними цілого типа

А оголошення:

Dim Array2(4, 9) As Variant ‘ визначає двовимірний масив

‘ із п’ятдесяти (5 x 10) елементів, зі змінними універсального типа variant

(Зауваження)

Як стандартне значення нижньої границі масиву (індексу) може використовуватися не лише нуль. Аби змінити це стандартне значення, потрібно скористатися оператором Option Base. Наприклад, якщо помістити в початок модуля оператора Option Base 1, то індексування елементів масивів за умовчанням починатиметься не з нуля, а з одиниці.

При оголошенні масиву можна вказати не лише верхню границю індексу, а й його нижню границю, тобто явно задати діапазон зміни конкретного індексу масиву, причому нижній може бути будь-яким цілим числом. Ось синтаксис такого визначення:

Dim < ім'яМасиву > (< мін1> То < макс1>,...) As < типДаних>

Приклади.

Dim Sales(5) As Currency

– за умовчанням індекс починається з 0 до 5 тобто 6 – елементів: Sales(0), Sales(1)…Sales(5) типу Currency.

Dim AS(700 to 799) As Integer

– містить 100 елементів типу Integer (AS(700), AS(701), AS(702), …, AS(799))

Dim CC(4, 1 to 3) As Single

– масив 5 х 3 типа Single

Dim ZZ(3 to 23; 5 to 7) As Date

– масив 21 х 3 типу Date

Якщо збираємося працювати з масивом метеорологічних даних, що є середніми денними температурами за останні два тижні, то може виявитися зручним наступне визначення масиву:

Dim Temperature (-14 То 0) As Single

При цьому, наприклад, Temperature(-2) відповідатиме позавчорашній температурі, а для визначення потрібного індексу для дня, що цікавить, буде достатньо використовувати різницю дат.

У наведених раніше прикладах йшлося про масиви фіксованого розміру, кількість елементів в яких явно вказана під час опису масиву в операторі Dim. Такі масиви називаються статичними. У VB допускається використання і динамічних масивів, розміри яких при опису не фіксуються. Визначення розміру динамічного масиву може бути зроблене безпосередньо під час виконання програми.

При визначенні динамічного масиву в операторові Dim після імені масиву стоять лише порожні дужки і опис типа змінних. Кількість індексів і діапазон їх зміни не задається. Проте перш ніж використовувати масив, потрібно застосувати оператор ReDim, який задасть розмірність і діапазони зміни індексів динамічного масиву.

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

Dim < ім'яМасиву > () As < типДаних>

ReDim < ім'яМасиву > (< розмір1>, < розмір2>...)

От як може виглядати оголошення, визначення розмірів і використання динамічного масиву, а потім подальша зміна розмірності і розмірів цього ж масиву:

Dim dArray() As Variant

ReDim dArray(1, 2)

dArray(0, 0) = 2

dArray(0, 1) = 3

k = dArray(0, 0) + dArray(0, 1)

ReDim dArray(k)

dArray (0) = " Рядок!."

В даному прикладі масив dArray спочатку визначається як двовимірний масив з шести елементів, а потім — як одновимірний масив, причому верхня границя індексу задається значенням змінної k.

(Зауваження)

Аби визначити поточну нижню або верхню границю масиву, можна використовувати функції LBound і UBound, відповідно.

За умовчанням при зміні розмірів масиву йому заново виділяється пам'ять і поточні значення його елементів втрачаються. Аби не втратити поточні значення масиву при зміні його розмірів, використовується ключове слово Preserve.

Приклад.

Збільшити розмір масиву dArray на один елемент, не втративши значень існуючих елементів, можна таким чином:

ReDim Preserve dArray(UBound(dArray) + 1) ‘збільшити розмір масиву dArray

‘ на один елемент, де UBound(dArray) визначення найбільшого індексу

‘ існуючого масиву dArray()






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.