Стиль оформления кода на vb
Большинство современны языков программирования накладывают не слишком жёсткие ограничения на оформление кода: выбор имён идентификаторов (переменных, констант, подпрограмм) , компоновку операторов в строках, наличие комментариев и т.д. Как правильно воспользоваться этой свободой? Этому и посвящена данная статья.
При разработке программного продукта коллективом программистов существует такое понятие как coding conventions - соглашения о стиле кодирования. Это единый набор правил определяющий принципы выбора имён переменных, форматирования исходных текстов программ, использование комментариев и т.п. Хотя эти соглашения являются индивидуальными для каждого коллектива и даже для каждого проекта, однако можно выделить некоторые универсальные устоявшиеся положения, которые составляют хороший стиль оформления кода.
Однако единый стиль программирования необходим не только при коллективной разработке. Применение принципов описанных в данной статье позволит сэкономить некоторое количество сил и времени при разработке и ваших программ даже если вы пишете в одиночку.
Многие начинающие программисты скептически относятся к такого рода рекомендациям, считая что их код и так прост и понятен. К сожалению зачастую это не так. Запомните: если в вашей программе больше трёх строк кода - пора задуматься о его правильном оформлении.
Ведь ваш стиль оформления кода - это ваш электронный почерк. Давайте писать красиво!
Материал статьи ориентирован в первую очередь на язык Microsoft Visual Basic, однако может быть с некоторыми ремарками распространён и на другие языки программирования.
Статья расчитана в первую очередь на программистов уже имеющих знакомство с языком, но не имеющих опыта реального программирования и ещё не имеющих устоявшегося стиля написания кода. Хотя возможно будет небезынтересна и опытным программистам.
Всё написанное является личным мнением автора и не в коей мере не претендует ни на оригинальность, ни на абсолютную истинность.
Замечания и пожелания приветствуются.
1. Используйте осмысленные имена переменных, функций, элементов управления, классов и модулей.
Это первое с чем необходимо бороться начинающему (а иногда к сожалению и опытному) программисту. Дело в том, что если в момент написания вы помните для чего используется каждая переменная, то уже при следующем просмотре бывает сложно восстановить назначение и смысл некоторых переменных. А человеку которому вы захотите показать свой код и того трудней разобраться в нагромождении кучи переменных a, b, c, x, y, kkk, hjd и qwerty.
Имя переменной должно говорить само за себя. При одном взгляде на хорошо названную переменную становится очевидно не только предназначение, но и её тип, область видимости и её особенности.
Плохо: a, b, bb, bbb, b1, text1.
Хорошо: MessageText.
2. Используйте отступы.
Отступы - это символы пробелов или табуляции, вставляемые перед в начало строк которые лежат внутри конструкций которые имеют отрывающий и закрывающий оператор. В vb это If...Then...Else...End If, Do Until/While...Loop, For...Next, а также открытие и закрытие файлов Open...Close(...).
Не обсуждается. Отступы должны быть. Это наиболее простой и эффективный способ отразить структуру и вложенность операторов в вашем коде.
Сколько именно пробелов или символов табуляции вставлять не принципиально. Однако следует помнить, что в случае небольшого отступа (1-2 пробела) структура блоков кодов видна плохо, сводя на нет весь смысл отступов. А в случае больших отступов (больше 8 пробелов) при большой вложенности операторов строки начинают "вылезать" за правую границу окна редактора, и приходится прокручивать его горизонтальной полосой прокрутки. На мой взгляд оптимальным является величина в 4 пробела или 1 символ табуляции. Примечание: в vb6 для формирования отступов можно пользоваться клавишей Tab, но редактор преобразует эти символы табуляции в пробелы. Задать количество символов пробела на один Tab можно в Tools -> Options -> Editor -> Tab Width.
Плохо:
Код: | If frmMain.Visible Then
frmMain.Hide
Else
frmMain.Show
End If |
Хорошо:
Код: | If frmMain.Visible Then
frmMain.Hide
Else
frmMain.Show
End If |
3. Не используйте русские или иные национальные символы. Не используйте в качестве имён транскрипции русских (национальных) слов.
Vb один из немногих языков в котором разрешены имена в которых присутствуют символы из верхней кодовой таблицы (символы с ASCII-кодами свыше 127). Однако я бы не рекомендовал пользоваться этой возможностью. Так как это автоматически делает невозможной работу с вашим кодом для людей не владеющих русским языком или не имеющих русских шрифтов и русской раскладки клавиатуры. Имена получаются субъективно "некрасивыми". Кроме того, никто не гарантирует, что в одной из следующих версиях языка Microsoft не уберёт поддержку идентификаторов с национальными символами.
Что касается транскрибированных имён идентификаторов (например "peremennaya"), то это тоже не лучший выход. По тем же причинам - невладение языком, "грязность".
Так уж сложилось, что традиционно в программировании используются латинские символы, поэтому для таких системных вещей как имена идентификаторов следует использовать английский алфавит.
Плохо: txtЛогин, Проверка(), МассивФамилий, StrokaPoiska.
Хорошо: txtLogin, Check(), NamesArray, SearchString (про префиксы см. далее).
4. Не используйте имена элементов управления по умолчанию.
Этот совет имеет непосредственное отношение к пункту об осмысленных именах переменных. Если будете использовать имена по умолчанию, то вы очень быстро запутаетесь какое из 15 TextBox с номерами отвечает например за ввод имени пользователя.
Исключение: если вы задаёте вопрос на форуме и приводите образцы своего кода с просьбой попробовать его, или наоборот приводите код в качестве ответа, то имеет смысл использовать именно имена по умолчанию. Это связано с тем, что, во-первых, человеку который будет вставлять ваш код в редактор vb необходимо будет добавить форму и требуемые элементы управления и переименовывать их. Во-вторых, из имён не всегда очевиден тип элементов управления, а имена по умолчанию, как правило, совпадают с их типом (дополненные номером).
Плохо: Form1, Textbox2, ListView15.
Хорошо: frmMain, txtName, lvwListOfCommands (про префиксы см. далее).
5. Используйте префиксы типов.
Префиксы типов (так называемая венгерская нотация) - это определённые символы в начале имени переменной, которые в закодированном виде несут информацию о переменной. Общепринятыми являются следующие префиксы:
s или sz - переменная типа String
b - Byte или Boolean
i - Integer
l - Long
d - Double
s - Single
d - Date
o_ - объект
e - перечислимый тип (Enum)
g_ - глобальная переменная (Public)
m_ или loc_ - локальная переменная (Private)
и т.д.
Для элементов управления на форме:
txt - TextBox
pic - PictureBox
lbl - Label
fr или fra - Frame
tvw - TreeView
и т.д.
Для модулей:
frm - форма
mod - модуль
cls - модуль класса
Однако, следует заметить, что нет единого мнения о полезности такой записи. С одной стороны при одном взгляде на такую переменную сразу видно её особенности. С другой стороны не существует определённого стандарта такого именования, приходится производить дополнительные телодвижения при наборе имён переменных, это "уродует" имя переменной.
Лично я *всегда* использую префиксы типов только в именах элементов управления и модулей и в некоторых случаях в именах обычных переменных в особо запутанных местах.
Вы также можете "изобретать" свои префиксы. Но делать это следует осторожно и только в тех случаях, когда польза от этого перевешивает недостатки. Например в некоторых типовых случаях перед именами временных промежуточных переменных я ставлю префикс t_, в переменных получающих входную информацию in_, выходную out_.
Пожалуй сюда же следует отнести ещё один подход, хоть он и не имеет отношения к префиксам, но весьма полезен. Для типовых переменных используйте одинаковые имена. Например, перед открытием файла для хранения номера файла возвращаемого функцией FreeFile использовать переменную с именем ff. Таким образом, встречая в коде переменную ff, сразу становится понятно для чего она используется.
Плохо: lokalnaya_filename, FileName, InternetClass.
Хорошо: m_filename, txtFileName, clsInternet.
6. Капитализация vs подчёркивание.
В случаях когда имя идентификатора состоит из нескольких слов для удобства чтения их следует как-то разделить. Для этого есть два основных способа.
Капитализация - первая буква каждого слова в имени переменной записывается с заглавной буквы, остальные строчными.
Подчёркивание - слова разделяются символами подчёркивания "_".
Какой из двух способов предпочесть - дело вкуса. Однако могу порекомендовать следующий принцип: в именах локальных или промежуточных переменных используйте подчёркивание, в глобальных переменных (глобальных на уровне модуля или приложения) - капитализацию. Во-первых: капитализованные переменные выглядят более "солидно" и это выделяет их в коде. Во-вторых: это позволяет визуально различать переменные по области видимости и позволяет отказаться от использования префиксов области видимости (g_ и m_ - см. пункт о префиксах типов). Вы можете использовать любые другие схемы, если они кажутся вам более логичными и облегчают чтение и понимание кода.
Плохо: filenameslist, sfilenameslist
Хорошо: filenames_list, FileNamesList, sFileNamesList.
7. Пишите комментарии.
Старайтесь по возможности писать комментарии. Если вы покажете кому-то свой код, то ему будет намного проще сориентироваться в нём, если там будут подсказки в виде комментариев. Даже если вы не собираетесь ничего никому показывать всё равно следует писать комментарии. Так как просматривая свой код уже через месяц вы будете с трудом вспоминать что и как у вас работает и зачем нужен тот или иной кусок. Комментарии выступают как своеобразные записки (как говорит наш уважаемый администратор Bit "писюльки" :] ) самому себе на будущее.
Хорошим тонов является перед каждой значимой подпрограммой (процедурой, функцией, методом, свойством) писать небольшой заголовок с описанием подпрограммы: что она делает, входные параметры, возвращаемые значения, особенности её использования и прочие замечания. Например вот в таком виде:
Код: | Public Function CalcCheckSum(ByRef x() As Long) As Long
' Расчёт контрольной суммы
' Вход:
' x() - последовательность для которой вычисляется контрольная сумма
' Выход:
' значение контрольной суммы, алгоритм - crc32
' Особенности:
' - аргумент x() передаётся по ссылке для экономии памяти - соблюдать осторожность
' - использует загруженную ранее таблицу crc_table
...
End Function |
Однако следует избегать и чрезмерного и бессмысленного комментирования.
Плохо:
' записываем в переменную c значение равное сумме переменной a и переменной b (слишком развёрнуто, очевидно из кода и без комментариев)
c = a + b
Хорошо:
' расстояние от начала координат до точки (лаконично, отражает суть)
r = Sqr(x * x + y * y)
В основном, все признают необходимость комментариев. Но на практике выполняют это условие немногие. Причина банальна - лень. Чтобы это не было таким скучным занятием можете развлекать себя, например, если вы любите ascii-art, то можете каждый комментарий заключать в красивую рамочку с использованием псевдографики. Неплохим вариантом является написание комментариев по-английски - заодно и язык подучите. Можете писать комментарии на сленге (один мой приятель как-то рассказал, что в фирме в которой он работал, обратили его внимание на то, что он пишет комментарии в "падонскам" стиле). Хотя я всё же по очевидным причинам не рекомендовал бы писать комментарии с использованием непечатной лексики.
Запомните - плохие комментарии лучше, чем вообще никаких.
8. Используйте одинаковую индексацию.
Как правило массивы индексируют начиная с 0 или 1. У обоих подходов есть свои достоинства и недостатки. Вы можете использовать тот который вам больше нравится. Но всегда используйте только эту индексацию. По крайней мере в рамках одного проекта. Это избавит вас от необходимости перед каждым массивом или коллекцией мучительно вспоминать, а потом и метаться по коду выискивая какой же индекс у вас имеет первый элемент 1 или 0.
9. Читайте чужие программы.
Когда просматриваете чужой код обращайте внимание на то как он написан, как отформатирован. Выделяйте для себя образцы удачного и неудачного кода, то что вам показалось удобным и то что вам не понравилось. Учитесь на чужом опыте.
Заключение.
Подытожив, можно сказать, что ключевыми концепциями грамотного оформления кода, из которых вытекают все приведённые положения, являются: использование "самоописывающихся" имён идентификаторов, применение комментариев, использование единого стиля на протяжении всего проекта, поддержание баланса между подробностью и лаконичностью описания.
Следуя приведённым простым правилам вы сможете писать в традиционном общепринятом стиле. Практикуйтесь, с опытом вы станете полнее понимать логику языка и процесса программирования в целом, а также приобретёте свой собственный стиль программирования.
Автор: Chan
Источник: www.bit.pirit.info/forum/
|