Файл: Освой самостоятельно программирование для MS Access 2002 за 24 часа [П.Киммел].pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 21.10.2020
Просмотров: 7908
Скачиваний: 25

Ниже рассказывается о приемах и соглашениях, которые помогут вам продлить
жизнь программ и облегчить свою собственную. Считаю, что хорошо сделанная рабо-
та дает возможность поскорее приступить к новому и еще более интересному проекту,
который — не будем лицемерить — наверняка отзовется хрустом свежих (честно зара-
ботанных!) купюр в кармане.
Основные темы занятия.
• Соглашения об именовании объектов программы.
• Отступы и комментарии — средства обеспечения удобочитаемости текста.
• Как упростить код и обеспечить его повторное использование.
• Советы по тестированию и отладке кода.
Соглашения об именах
Степень удобства восприятия программного текста во многом зависит от качеств
принятой системы именования объектов. Если говорить об объеме работы по вводу
текста, то усилия, требуемые для набора комментариев, с одной стороны, и строк ко-
другой, примерно равнозначны. В большинстве случаев код, в котором соблю-
дены правила именования, почти не нуждается в дополнительных примечаниях. Если
же текст программы запутан и неоднозначен, комментарии, конечно же, необходи-
мы — а это удвоит объем вашей работы. Недоработанный код — это настоящий кош-
мар: дальнейшее сопровождение такой программы потребует от вас огромных затрат
времени, сил и интеллектуальной энергии. Подобных примеров немало, и они, увы,
множатся — но это не значит, что вы, уважаемый читатель, должны им подражать.
Существует два подхода к вопросу о том, что представляет собой правильная сис-
тема именования объектов программы. Обе точки зрения привлекают внимание опре-
деленных кругов приверженцев. Одна из школ отстаивает мнение о полезности сис-
темы, основанной на так называемой
префиксной нотации,
или, как ее часто называ-
ют,
венгерской нотации.
Такая концепция была предложена в начале 80-х Шарлем
Симони (Charles Simonyi). Венгерская нотация предполагает разработку и использо-
вание системы префиксов, в сокращенной форме описывающих принадлежность пе-
ременных, объектов, функций и процедур определенному типу. Например, буква
может быть поставлена в соответствие типу integer, и тогда названию каждого объ-
екта кода и данных, который имеет отношение к целочисленному типу, должен пред-
шествовать символ
i.
Так, например, переменную типа Integer, предназначенную
для хранения данных о возрасте человека, следовало бы назвать iAge. Можно привес-
ти и другие примеры с подробными пояснениями.
Слабо типизированным
называется язык программирования, компилятор
или интерпретатор которого не выполняет строгих проверок соответствия
значений аргументов типам переменных. Примером может служить такая
ситуация: при объявлении целочисленной переменной компилятор не
препятствует присваиванию ей значений других числовых типов. К слабо
типизированным относится, например, язык С.
Новый термин
Новый термин
Строго типизированный
язык программирования не допускает неточно-
стей в отношении трактовки типов переменных. Все значения должны
обязательно соответствовать оговоренным типам переменных. Примером
строго типизированного языка служит C++. VBA также можно отнести к
строго типизированным языкам, хотя и не в такой степени "строгим",
как большинство реализаций C++.
И в книге, и в повседневной практике я не придерживаюсь префиксной нота-
ции — более того, мне вообще не нравится какая-либо нотация. Доводы против упот-
ребления венгерской нотации можно выдвинуть следующие.
240 Часть V. Программирование и базы данных Access

Многие из причин, обусловивших возникновение префиксной нотации, се-
годня утеряли свою актуальность. Нотация была впервые применена в слабо
типизированном языке С, который не относится к объектно-
ориентированным. Но большинство современных инструментальных сред
программирования строго типизированы.
Многие языки, разработанные после возникновения префиксной нотации,
реализуют объектную концепцию, позволяя создавать необозримое много-
образие новых классов. Получается, что для каждого класса придется вно-
сить соответствующий префикс. Как тогда вести разрастающийся список
префиксов и четко следовать ему?
Даже для стандартных классов не существует единого унифицированного
списка префиксов, поэтому каждый тип можно называть по-разному, что
отнюдь не решает проблему.
Если вы решили использовать венгерскую нотацию, создайте собствен-
ный (а лучше — коллективный) список префиксов и неукоснительно
соблюдайте все правила.
Для обозначения переменных, классов, объектов, функций и процедур, вместо
префиксной нотации можно применять понятные однозначные словосочетания — это
второй общий способ обеспечить
программного текста. Полные сло-
ва и признаки контекста передают смысл сказанного достаточно точно, поэтому до-
полнительные пояснения чаще всего не требуются. Далее приведены простые правила
именования, которых следует придерживаться.
• Целые, неусеченные, слова объясняют назначение объектов программы дос-
таточно четко.
• Для именования функций и подпрограмм часто удобно применять словосо-
четания из существительных и глаголов.
• Следует избегать использования нестандартных сокращений.
• Если аббревиатуры необходимы, их надлежит унифицировать.
Создание списка аббревиатур, стандартных для предметной области, в
которой вы работаете, приводит пример одного из возможных способов
использования сети intranet. Можно создать intranet на своем компью-
тере и сделать его доступным для всех пользователей локальной сети.
Публикация информации о проекте в intranet уменьшает объем оборота
бумажных документов, гарантирует постоянный доступ и обеспечивает
хранилище достоверной информации.
Конечно, легче запомнить и применять представленный перечень аргументов, не-
жели список из десятков или сотен префиксов. Если вам важно обозначить в наиме-
новании переменной признак принадлежности ее определенному типу, укажите более
ли менее полное название типа. Для этого потребуется несколько раз нажать клави-
ши. Например, если переменная обозначает главную форму приложения, ее можно
назвать, скажем,
Только и всего.
Использование целых слов при именовании
Размышляя над именем процедуры или функции, назовите ее понятным словосо-
четанием, и дополнительные комментарии станут излишними. Кроме того, чем более
лаконично содержимое функции, тем менее вероятны недоразумения. Просмотрите
текст листинга
14-й час. Стиль программирования: "Что такое хорошо, и что такое плохо" 241

Советуем, по возможности, создавать отдельные функции даже в том
случае, если они окажутся такими простыми, как приведенная выше Get-
TotalSale. Именованный блок кода гораздо более красноречив, чем те
же строки, употребленные непосредственно в окружении многих других.
Листинг
Пример выбора удачных имен программных объектов
Function
Sale As Double, Optional SalesTax As
Double = 0 . 0 8 2 5 ) As Double
GetTotalSale = Sale * (1 + SalesTax)
End Function
Словосочетание GetTotalSale точно указывает на предназначение
функции — расчет полной стоимости продажи. Смысл параметров
и SaleTax также достаточно ясен. Поскольку функция коротка и облада-
ет удачным именем, она не нуждается в дополнительных комментариях,
а наименования ее переменных — в префиксах.
Нетрудно представить, как тот же код может выглядеть в исполнении других про-
граммистов. Например, глагол
Get
легко заменяется
а
слово
Tax
превращается в
Тх.
Однако такие сокращения способны легко привести к разночтениям и непонима-
нию (скажем,
Тх —
стандартная аббревиатура названия штата Техас).
Использование словосочетаний
при именовании подпрограмм и функций
Рекомендуется перед именами функций и подпрограмм употреблять глаголы, указы-
вающие на определенное действие, а затем добавлять существительное, обозначающее
предмет или объект, на который оказывается влияние. Существительное и глагол, соеди-
ненные вместе, в обычной речи хорошо передают смысл высказывания, и программный
код не будет исключением. Если в теле функции или процедуры выполняются только те
действия, о которых свидетельствует ее название, больше ничего и не требуется.
Get (взять, получить),
часть наименования функции листинга
— это глагол,
Total (полный) —
прилагательное, a
Sale (стоимость продажи) —
существительное. Со-
единенные вместе, эти слова ясно выражают назначение функции.
Новый термин
Процедура —
общее название функций и подпрограмм. В данном изда-
нии этот термин используется в случае, когда излагаемый материал отно-
сится и к функциям, и к подпрограммам.
Появление в именах программных объектов сокращенных слов можно
объяснить некоторыми традициями, которые перешли к нам, так сказать,
по наследству — прежние версии компиляторов и интерпретаторов зачас-
тую просто не поддерживали возможностей задания длинных имен. Следуя
привычке, многие программисты по сей день употребляют в своем коде
аббревиатуры. Язык
в этом смысле ничем вас не ограничивает —
используйте идентификаторы такой длины, какую считаете целесообразной.
Как правило, если описательное наименование процедуры очень длинное,
значит в ней выполняется слишком много действий. Подумайте о том,
чтобы разбить ее на несколько процедур.
242
Часть V. Программирование и базы данных Access

Так что, намереваясь создать процедуру или функцию, придумайте для нее подхо-
дящее имя, состоящее, возможно, из глагола, описывающего выполняемое действие,
и существительного, указывающего на предмет ваших забот.
Избегайте нестандартных аббревиатур
Во многих отраслях промышленности и бизнеса приняты соглашения, касающиеся
употребления сокращений. Та или иная аббревиатура в контексте подобного соглашения
становится вполне понятной, но стоит упустить контекст из виду, как сразу возникают не-
доразумения. В качестве общего правила порекомендуем следующее: старайтесь избегать
нестандартных сокращений и акронимов. Если аббревиатуру, которую вы намереваетесь
ввести, нельзя найти в обычном словаре, используйте полный вариант словосочетания.
Допустим, все потенциальные пользователи вашей программы осведомлены об ис-
пользуемых сокращениях — что ж, пожалуйста, действуйте! Впрочем, список аббревиа-
тур и их значений создать все равно придется. Автору этой книги например, приходи-
лось участвовать в проектах, находивших применение в различных отраслях. Естествен-
но, запоминать сотни различных жаргонных сокращений, принятых в разных организа-
циях, — дело совершенно ненужное и неблагодарное. Если уж без сокращений никак не
обойтись, пользуйтесь четким списком, согласованным с коллегами и заказчиками.
Правила выравнивания текста
программы
Отступы
(не содержащие видимых символов фрагменты начала строк кода) —
весьма полезное и важное средство обеспечения хорошего восприятия программного
текста. Следуйте правилам выравнивания текста, и ваш код приобретет ясность и вы-
разительность. Сопоставьте два листинга (14.2 и 14.3), которые содержат тексты одной
и той же функции. В первом отступы используются беспорядочно и случайно, а во
втором позиции начала строк четко выровнены по вертикали.
Листинг 14.2. Пример неверного использования отступов
Function GetIQText(
IQ As Integer ) As String
If IQ <
Then
=
"Коэффициент ниже 79 свидетельствует о серьезном интеллектуальном отставании"
IQ >=79 And IQ < 90 Then
GetlQText = "Низкий или средний уровень
Elself IQ >= 90 And IQ < 105 Then
GetlQText = "Нормальный уровень интеллекта"
Else: GetlQText = "Интеллект выше нормального"
End
If
End Function
4 :
5:
6:
7 :
8:
9 :
10
Увы, мне приходилось иметь дело с десятками тысяч строк кода, схожего с
приведенным выше. Если откровенно, я не хочу обвинять кого-либо в том,
что подобное "творчество" носило преднамеренный характер. Скорее всего,
текст стал таким после целого ряда бессистемных исправлений. В общем,
большинству программистов понятно, что это нехорошо. Сколько раз прихо-
дилось слышать фразу: "Да, я знаю, но сейчас у меня просто нет времени —
как-нибудь потом". Потрясающе, ведь и говорящему, и вни-
мающему заранее известно, что это "потом" не наступит никогда.
14-й час. Стиль программирования: "Что такое хорошо, и что такое плохо" 243

1:
2 :
3:
4:
Процедура листинга 14.2 выполняет анализ коэффициента интеллекта (IQ) и воз-
вращает строку текста, отвечающую значению IQ. Задача весьма проста, но код чрез-
вычайно труден для чтения (не так
поскольку отступы введены удивительно не-
ряшливо. (Текст настолько безобразен, что я испытывал затруднения при его наборе.)
А теперь взгляните на листинг 14.3.
Листинг 14.3. Пример удачного использования отступов
Function GetIQText(
As Integer ) As String
If IQ < 79 Then
=
"Коэффициент ниже 79 свидетельствует о _
серьезном интеллектуальном отставании"
IQ >=79 And IQ < 90 Then
GetlQText = "Низкий или средний уровень интеллекта"
Elself IQ >= 90 And IQ < 105 Then
GetlQText = "Нормальный уровень интеллекта"
Else
GetlQText = "Интеллект выше нормального"
End If
End Function
14.3 содержит тот же код, что и листинг 14.2, но на сей раз текст
I просто радует глаз, и все благодаря какой-то, казалось бы, мелочи — пра-
вильному выравниванию текста. Обратите внимание на отступы и пустые
линии, выделяющие тело функции на фоне ее начальной и завершающей
строк. Служебные слова условной
выровнены по одной
позиции; выражения, соответствующие каждому из условий, сдвинуты
вправо еще на один символ табуляции. Отступы одновременно упрощают
восприятие строк кода и определяют уровни их вложенности: теперь по-
нятно, что конструкция If принадлежит функции GetlQText, а каждое из
выражений присваивания отвечает определенному условию.
Наконец, листинг 14.4 представляет вашему вниманию лучшую (по мнению авто-
ра) реализацию той же функции.
9:
10:
11:
13:
Листинг 14.4. Пример использования выражения Select Case
1: Function GetlQText ( ByVal IQ As Integer ) As String
2:
3: Const RETARDED =
"Коэффициент ниже 79 свидетельствует о _
серьезном интеллектуальном отставании"
4: Const LOW = "Низкий или средний уровень интеллекта"
5: Const NORMAL = "Нормальный уровень интеллекта"
6: Const ABOVE_NORMAL = "Интеллект выше нормального"
7:
8: Select Case IQ
9: Case Is < 79
10: GetlQText = RETARDED
11: Case Is < 90
12 : GetlQText = LOW
13: Case Is < 105
14: GetlQText = NORMAL
15: Case Else
16: GetlQText = ABOVE NORMAL
244
Часть V. Программирование и базы данных Access