Опубликован: 13.09.2006 | Уровень: для всех | Доступ: платный | ВУЗ: Тверской государственный университет
Лекция 4:

Типы данных и переменные

< Лекция 3 || Лекция 4: 1234 || Лекция 5 >
Аннотация: Типы данных. Простые типы данных. Объявление переменных и констант простых типов. Синтаксис объявления простых переменных. Объявления по умолчанию. Константы. Массивы. Динамические массивы. Записи и тип, определенный программистом. Что можно делать с записями? Раздел объявлений. Раздел опций. Разделы констант, типов и переменных. Раздел Declare. Правила именования.

Программный код большинства примеров данной лекции можно найти в проектах, доступных для просмотра: doc3One.

Типы данных

Одни из первых вопросов, возникающих при изучении языка программирования: "Как в нем устроена система типов данных? Какие есть простые типы, как создаются сложные, структурные типы, есть ли возможность определения собственных типов, динамических типов, можно ли в нем определять классы - "настоящие" типы, где определяется не только область возможных значений и структура данных, но и операции над ними?" На эти вопросы применительно к VBA мы и постараемся ответить в этой лекции.

Вначале договоримся о терминах. Когда мы говорим, что Т - это тип данных, то понимаем, что определение типа Т задает:

  • область возможных значений типа;
  • структуру организации данных;
  • операции, определенные над данными этого типа.

Исторически сложилось так, что, при определении типа опускают операции, разрешенные над ним, подразумевая их неявно. Например, определяя тип Integer, говорят, что он задает целые числа в некотором диапазоне. Конечно, где-то позже обязательно будет сказано, какие операции разрешены над целыми. В связи с развитием объектно-ориентированного программирования определение типа стали давать "по-настоящему" и включать в него все три компонента. Правда, теперь такие типы называются классами. Но для нас "класс" - синоним понятия "тип данных".

Типы данных принято разделять на простые и сложные в зависимости от того, как устроены их данные. У простых (скалярных) типов возможные значения данных едины и неделимы. Сложные типы характеризуются способом структуризации данных, - одно значение сложного типа состоит из множества значений данных, организующих сложный тип.

Есть и другие критерии классификации типов. Так, типы разделяются на встроенные типы и типы, определенные программистом (пользователем) . Встроенные типы изначально принадлежат языку программирования и составляют его базис. В основе системы типов любого языка программирования всегда лежит базисная система типов, встроенных в язык. На основе встроенных типов программист может строить собственные, им определенные типы данных. Но способы (правила) создания таких типов являются базисными, встроенными в язык.

Типы данных разделяются также на статические и динамические типы . Для данных статического типа память отводится в момент объявления, требуемый размер данных известен при их объявлении. Для данных динамического типа размер данных в момент объявления не известен и память им выделяется динамически в процессе выполнения программы по запросу.

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

Замечание:

Среди языков программирования выделяются два крайних случая, - строго типизированные языки и бестиповые языки. В первом случае, каждая переменная имеет строго фиксированный в момент объявления тип и он не может изменяться в процессе выполнения программы. Такие языки являются более надежными, поскольку обеспечивают жесткий контроль типов и позволяют обнаруживать ошибки еще на стадии компиляции программы. Классическим примером является язык Паскаль. Бестиповые языки это скорее языки с одним единственным типом. В таких языках одна и та же переменная по ходу программы может хранить данные фактически разных типов. Тип Variant языка VBA является примером такого обобщающего типа. Бестиповые языки обеспечивают более быстрое исполнение программ, предоставляют программистам большую гибкость, но плата за это высока, она достигается это за счет надежности программ. Одним из первых бестиповых языков был Lisp, где единственным типом данных был список. "Свежим" примером бестипового языка является HTML. "Хорошие" языки программирования, как, например, VBA допускают бестиповость в ограниченных пределах.

Простые типы данных.

Как и всякий порядочный язык, VBA содержит все привычные встроенные простые типы данных: логические, арифметические и строковые:

Таблица 3.1. Система простых типов языка VBA
Имя типа Возможные значения Требуемая память
Boolean True, False 2 байта
Byte 0…255 1 байт
Integer -32768 …+32767 2 байта
Long Примерно: -2000 000 000…+2000 000 000 4 байта
Decimal Примерно 30 десятичных цифр. Можно указать число цифр после десятичной точки. 12 байтов
Single - 3,4E38 …-1,4 E-45 для отрицательных значений 1,4E-45 … 3,4E38 для положительных значений 4 байта
Double -1,7E308 … -4,9E-324 для отрицательных значений4,9E-324 … 1,7E308 для положительных значений 8 байтов
Currency Десятичные числа с фиксированной позицией запятой. Возможны 15 цифр до запятой и 4 после. 8 байтов
String Есть два вида строк: Строки фиксированной длины имеют до 216 символов. Строки переменной длины имеют до 231 символов. 10 байтов +1 байт на символ в обычной кодировке и 2 байта в кодировке Unicode
Date Даты изменяются в диапазоне от 1 января 100 г. до 31 декабря 9999 г. 8 байтов
Object Ссылка на объект (указатель) 4 байта
Variant Универсальный тип, значением которого могут быть данные любого из перечисленных выше типов, объекты, значения NULL и значения ошибок ERROR Зависит от контекста, но не менее 16 байтов

Как видите, в VBA имеется не меньше простых типов, чем в других известных языках программирования. Сделаем несколько замечаний. Переменные типа Decimal нельзя объявлять так, как переменные других типов, - например, оператором Dim. Этот тип является одним из вариантов типа Variant и для его задания используется функция CDec. Тип Currency используется при денежных расчетах.

Замечание:

Иногда, тип Currency используют вместо вещественного типа Single для ускорения расчетов. Вычисления над данными этого типа идут быстрее, чем в случае, когда для проведения вычислений приходится привлекать сопроцессор.

Особо стоит сказать о типе Variant. Такой универсальный тип позволяет превратить язык в бестиповый,- все данные могут иметь один тип ( Variant ). Конечно, это удобно (думать не надо!), а иногда и полезно, но чревато неприятными ошибками, да и память расходуется не эффективно. VBA провоцирует чрезмерное использование этого типа, так как позволяет, объявляя переменную, не указывать ее тип, и тогда по умолчанию он устанавливается как Variant. Правильно всегда объявлять тип переменной, например, пишите Byte, если Вы знаете, что возможные значения не выходят из этого диапазона. Контроль типов поможет избежать ошибок при выходе значения за возможные пределы. Особого внимания требует работа с массивами, - плата за неэффективное использование памяти здесь может быть чрезмерно высока.

Переменные типа Variant могут получать значения любого типа в зависимости от контекста. Кроме того, они могут принимать и некоторые специальные значения:

  • Empty - переменная не была инициализирована;
  • NULL - данные ошибочны;
  • ERROR - значение содержит код ошибки, который может быть использован для ее обработки в программе;
  • Nothing - переменная типа Object ни на что не ссылается: связь между ней и конкретным объектом прервана или не установлена.
< Лекция 3 || Лекция 4: 1234 || Лекция 5 >
полина есенкова
полина есенкова
Дмитрий Вологжин
Дмитрий Вологжин
Добрый день, прошел тесты с 1 по 9, 10 не сдал, стал читать лекцию и всё пройденные тесты с 1 по 9 сбросились, когда захотел пересдать 10 тест.
Людмила Слесарева
Людмила Слесарева
Россия
Александр Орлов
Александр Орлов
Россия