Тверской государственный университет
Опубликован: 13.09.2006 | Доступ: свободный | Студентов: 3490 / 369 | Оценка: 4.65 / 4.29 | Длительность: 30:37:00
Специальности: Программист, Менеджер
Лекция 4:

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

< Лекция 3 || Лекция 4: 1234 || Лекция 5 >

Раздел объявлений

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

В классически надежном языке программирования Паскаль, созданном Никласом Виртом, раздел объявлений имел четкую структуру и в свою очередь подразделялся на разделы, содержащие объявления констант, типов, процедур, переменных. В языке VBA такого формального разделения нет, поэтому возможно, что объявление переменных пользовательского типа T предшествует объявлению самого типа. Опять-таки наша рекомендация состоит в том, что программист должен самостоятельно поддерживать структуру раздела объявлений и разделять объявления констант, типов и переменных. Давайте четко выделим основные части раздела объявлений:

  • Раздел опций.
  • Раздел констант.
  • Раздел типов.
  • Раздел переменных.
  • Раздел Declare.

Раздел опций

Опции являются указаниями для транслятора. Они могут задаваться только на уровне модуля и должны начинать раздел объявлений. Заметьте, это не пожелание, а синтаксическое требование. Опции задаются ключевым словом Option, после которого идет имя опции и возможно параметры. Часть из возможных опций мы уже рассмотрели по ходу дела. Сейчас же перечислим их состав полностью:

  • Explicit - Об этой опции мы уже подробно говорили. При ее указании транслятор требует, чтобы все переменные модуля были явно описаны. Правильно включить эту опцию раз и навсегда в опциях Редактора VBA.
  • Base - Эта опция имеет два значения: 0 и 1, указывающие нижнюю границу индекса массивов, задаваемую по умолчанию. Правильно не пользоваться этой опцией, а самому и всегда указывать нижнюю границу. К сожалению, нет флажка, который бы заставлял нас следовать этому разумному правилу.
  • Private - Эту опцию, достаточно поместить в один из модулей проекта, обычно, в главный модуль проекта, который неявно всегда выделяется программистом. При ее задании проект делается закрытым и недоступен для других проектов в системе документов.
  • Compare - Опция говорит транслятору, как он должен выполнять сравнение строк в процедурах модуля. Параметр опции может принимать одно из трех возможных значений:
    {Binary | Text | DataBase}

По умолчанию VBA применяет метод Binary, при котором строки сравниваются по внутренним кодам соответствующих символов. В Windows порядок сортировки определяется кодовой страницей. Вот часть типичного такого порядка:

A < Z < a < z 
z < А < Я < а < я

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

(A = a) < (Z = z) 
(Z = z) < (А = а) < (Я = я)

Метод DataBase допустим лишь при работе с Access. Сравнение при этом базируется на порядке, задаваемом локализацией той БД, для которой проводится сравнение.

Разделы констант, типов и переменных

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

Для констант и типов ключевые слова Const и Type однозначно определяют описываемый объект. Для переменных ключевые слова могут быть разными. Заметим, что для переменных уровня модуля не целесообразно использовать ключевое слово Dim, лучше использовать спецификаторы Public или Private, явно указывающие область действия переменной.

Раздел Declare

Этот раздел появляется в тех случаях, когда модули проекта используют динамически присоединяемые библиотеки - DLL. Если DLL имеет библиотеку типов TypeLib и она доступна проекту, то нет необходимости описывать компоненты библиотеки, они будут найдены автоматически. Но если TypeLib недоступна или не определена, то в этой ситуации каждая из функций и процедур библиотеки, вызываемая в модуле, должна быть предварительно описана специальным оператором Declare. Вот его синтаксис:

[Public | Private] Declare {Sub | Function} имя Lib "имя_библиотеки" _
[Alias "псевдоним"] [([параметры])] [As возвращаемый_тип]

Здесь указывается имя библиотеки, имя процедуры или функции, возможный псевдоним, параметры и возвращаемое значение для функций. Подробно о DLL, операторе Declare с примерами на эту тему будет рассказано в одной из лекций этой книги.

Правила именования

Есть несколько простых правил, которые следует выполнять, чтобы быть цивилизованным программистом. Заметьте, можно быть умным, грамотным, но хорошо бы еще быть и цивилизованным. Многим из нас, я это отношу и к себе, не хватает цивилизации. Правила, о которых мы сейчас поговорим, касаются оформления текста программ. Большинство из них достаточно просто и по ходу дела мы о них неоднократно говорили. Вот основные:

  • Используйте комментарии.
  • Соблюдайте правила именования.
  • Структурируйте текст.
  • Стройте программы из модулей "подъемного" размера.

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

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

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

Таблица 3.2. Префикс, задающий область действия
Первая часть префикса Область действия
g Global - Весь проект
m Module - Для Private переменных модуля отсутствует
p Procedure - Для локальных переменных
Таблица 3.3. Префикс, задающий тип переменной
Вторая часть префикса Тип переменной
str String
int Integer
byt Byte
lng Long
sng Single
dbl Double
cur Currency
var Variant
obj Object
bln Boolean

Вот несколько примеров правильно построенных имен: gstrOneWord, mintNumberOne, strAnswer, curSalary. Также как по значению константы можно восстановить ее тип, по правильно построенным именам можно однозначно восстановить их объявление. Сделаем это в нашем примере:

Public gstrOneWord As String
Private mintNumberOne As Integer
Dim strAnswer As String
Dim curSalary As Currency

Согласно этим же рекомендациям имена констант следует строить только из заглавных букв. Если имя константы состоит из нескольких слов, то для их объединения используется знак подчеркивания, например: MY_DIRECTORY_PATH. Обратите внимание, при построении констант Office 2000 используется префикс, указывающий, какому из приложений принадлежит константа.

Таблица 3.4. Префиксы констант Office 2000
Приложение Префикс констант
Access ac
Excel xl
FrontPage fp
Office mso
OfficeBinder bind
Outlook ol
Power Point pp
Word wd
VBA vb

Префиксы следует использовать и при именовании объектов, для форм обычно используется префикс frm, для командных кнопок - cmd и так далее. Следует понимать, что, если уж пользоваться префиксами, то обще употребительными, не следует заниматься самодеятельностью в этом вопросе. Мы закончим призывом, - "будьте цивилизованными".

< Лекция 3 || Лекция 4: 1234 || Лекция 5 >
полина есенкова
полина есенкова
Дмитрий Вологжин
Дмитрий Вологжин
Добрый день, прошел тесты с 1 по 9, 10 не сдал, стал читать лекцию и всё пройденные тесты с 1 по 9 сбросились, когда захотел пересдать 10 тест.