Visual Basic

Материал из Википедии — свободной энциклопедии
Текущая версия страницы покане проверялась опытными участниками и может значительно отличаться отверсии, проверенной 22 марта 2021 года; проверки требуют28 правок.
Перейти к навигацииПерейти к поиску
Не следует путать сVisual Basic .NET.
Visual Basic
Изображение логотипа
Класс языкаПроцедурный,Объектно-ориентированный,Компонентно-ориентированный,Событийно-ориентированный
Тип исполненияКомпилируемый,Интерпретируемый
Появился в1991
РазработчикMicrosoft
Расширение файлов.bas, .cls, .frm, .vbp, .vbg
ВыпускVisual Basic 6.0 (1998; 28 лет назад (1998))
Система типовСтатическая типизация,Строгая типизация,Динамическая типизация
Основные реализацииMicrosoft Visual Studio
ДиалектыVisual Basic for Applications,Visual Basic Script
Испытал влияниеQuickBasic,BASIC
Повлиял наVisual Basic .NET,REALbasic,Gambas,Xojo,Basic4ppc
Сайтmsdn.microsoft.com/ru-RU/vstudio/ms788229.aspx
ПлатформаWindows
Логотип Викисклада Медиафайлы на Викискладе

Microsoft Visual Basic — язык программирования, а также интегрированная среда разработкипрограммного обеспечения, разрабатываемые корпорациейMicrosoft. Язык Visual Basic унаследовал дух, стиль и отчасти синтаксис своего предка — языкаBASIC, у которого есть немало диалектов. В то же время Visual Basic сочетает в себепроцедуры и элементыобъектно-ориентированных икомпонентно-ориентированных языков программирования. Интегрированная среда разработки VB включает инструменты для визуального проектирования пользовательского интерфейса, редактор кода с возможностьюIntelliSense и подсветкой синтаксиса, а также инструменты для отладки приложений.

Visual Basic также является хорошимсредством быстрой разработки (RAD) приложений баз данных для операционных систем семействаMicrosoft Windows. Множество готовых компонентов, поставляемых вместе со средой, призвано помочь программисту сразу же начать разрабатывать бизнес-логику бизнес-приложения, не отвлекая его внимание на написание кода запуска программы, подписки на события и другие механизмы, которые VB реализует автоматически.

Первое признание серьёзными разработчиками Visual Basic получил после выхода версии 3. Окончательное признание как полноценного средства программирования для Windows — при выходе версии 5. Версия VB6, входящая в составMicrosoft Visual Studio 6.0, стала по-настоящему зрелым и функционально богатым продуктом.

Содержание

История развития

[править |править код]
Visual Basic 1.0 для MS-DOS. Дизайнер форм
Visual Basic 1.0 для MS-DOS. Редактор кода
Visual Basic 1.0 для Windows
Visual Basic 2.0/3.0
Visual Basic 6.0
Дата выпускаВерсияОписание
Май 19911.0Visual Basic 1.0 дляMicrosoft Windows. За основу языка был взятсинтаксисQBasic, а новшеством, принесшим затем языку огромную популярность, явился принцип связи языка и графического интерфейса. Этот принцип был разработанАланом Купером (Alan Cooper) и реализован в прототипеTripod (также известном какRuby)
Сентябрь 19921.0Visual Basic 1.0 подDOS. Он не был полностью совместим с Windows-версией VB, поскольку являлся следующей версией QuickBASIC и работал в текстовом режиме экрана. Интересно отметить, что в составе была специальная утилита, которая конвертировала проекты данной версии в проекты Visual Basic 1.0 для Windows. Она делала код максимально совместимым с Windows-версией, конвертировала формы (хотя результат получался неудовлетворительным из-за различий текстового и графического режима), а также давала в коде комментарии с подсказками по дальнейшему улучшению.
Ноябрь 19922.0Visual Basic 2.0. Среда разработки стала проще в использовании и работала быстрее. Окно «Свойства» переместилось в отдельный список. Добавленаподсветка исходного кода.
19933.0Вышел в свет Visual Basic 3.0 в версиях Standard и Professional. Ко всему прочему, в состав поставки добавился движок для работы сбазами данных Access.
Август 19954.0Visual Basic 4.0 — версия, которая могла создавать как 32- так и 16-разрядные Windows-приложения. Кроме того, появилась возможность писать на VB классы, а также Visual Basic наконец-то стал полноценнымкомпилятором, что значительно увеличило скорость выполнения программ. Добавлена поддержкаOLE Controls (OCX), взамен старым элементам управленияVBX[англ.]
Февраль 19975.0Visual Basic 5.0 — начиная с этой версии, стало возможно, наряду с обычными приложениями, разрабатывать своиCOM-компоненты. Скомпилировав такой компонент в OCX-файл и поставляя его, можно было предоставить свой объект управления не только конечномупользователю, но и другим разработчикам, после чего они могли интегрировать этот объект в свои приложения. В составе с интегрированной средой входятP-Code иNative компиляторы. Исполнением приложений занимается новая виртуальная машина реализованная в динамической библиотеке MSVBVM50.DLL. Также в 1 квартале этого года, Microsoft выпускает продукт в специальной редакции Visual Basic 5 Control Creation Edition (VB5CCE), который специализируется только над проектированиемActiveX элементов управления.
Середина 19986.0Visual Basic 6.0 — Оптимизирована работы виртуальной машины и вынесена в MSVBVM60.dll. Улучшена работа Native-компилятора. Добавлены новые функции для работы со строками и массивами. Данная версия языка является последней в линейке классического VB. Microsoft изменила политику в отношении языков семейства Basic и вместо развития Visual Basic, был создан абсолютно новый языкVisual Basic .NET.
20027.0Первый выпускVisual Basic .NET. Наиболее важная особенность заключается в том, что код полностью управляем платформой.NET Framework Common Language Runtime. Нарушенаобратная совместимость склассической версией Visual Basic (которая застыла как VB6).
Апрель 20037.1Microsoft модернизировала Visual Basic .NET, оптимизировала работу компилятора. Выпущен совместно с обновлённой версией .NET Framework 1.1.
20058.0Входит в составVisual Studio 2005. Требует .NET Framework 2.0. После выхода Visual Basic .NET 2003, Microsoft убрала приставку «.NET» из названия продукта и следующая версия называется Visual Basic 2005.
20089.0Входит в составVisual Studio 2008. Требует .NET Framework 3.5
201010.0Входит в составVisual Studio 2010. Требует .NET Framework 4
201211.0Входит в составVisual Studio 2012. Требует .NET Framework 4.5
201312.0Входит в составVisual Studio 2013. Требует .NET Framework 4.5.1
201514.0 (не вышел под номером 13.0)Входит в составVisual Studio 2015. Обновлен .NET Framework до версии 4.6
201715.0Входит в составVisual Studio 2017.

После выхода Visual Basic версии 6.0 разработчики из Microsoft существенно изменили направление развития данной технологии.Visual Basic .NET не позволяет программировать по-старому, потому что по сути является совершенно другим языком, таким же, как и любой другой язык программирования для платформы.NET. Индивидуальность языка, так же как и его преимущества (простота, скорость создания программ, лёгкость использования готовых компонентов) при использовании в среде .NET не имеют такого значения, как раньше — всё сосредоточено на возможностях самой платформы .NET, на её библиотеках классов. На данный момент (июнь 2015) нужно говорить о Visual Basic, как о классических версиях языка 4.0 — 6.0, его диалектах:Visual Basic for Applications (VBA) иVisual Basic Scripting Edition (VBScript) и о языке для платформы .NET — Visual Basic .NET.

В марте 2020 года Microsoft заявила, что будет поддерживать Visual Basic в унифицированной платформе .NET 5.0, но больше не будет добавлять новые функции или развивать этот язык[1][2].

Элементы языка

[править |править код]

Типы данных

[править |править код]

Переменные в Visual Basic объявляются операторомDim, после которого указывается имя, затем - ключевое словоAs и тип переменной. Если тип опущен, то ключевое словоAs не указывается и переменная объявляется как Variant. Если не указать конструкциюOption Explicit в разделе деклараций, то явного объявления переменных не требуется и они автоматически будут созданы при первом использовании. Данное поведение может привести к снижению скорости выполнения программы, так как необъявленные переменные будут иметь тип Variant, а также возможны логические ошибки, связанные с неверным вводом имени имеющейся переменной или риска конфликтов в приложении, когда область определения переменной не совсем ясна.

DimstrMessageAsString'объявление переменной символьного типаDimiProductCountAsInteger'объявление переменной целочисленного типаDimdt70YearsOfVictoryAsDate'объявление переменной для хранения даты и времениDimotherValue' тип не указан, переменная типа VariantPublicSubMain()strMessage="Привет, Мир!"iProductCount=125dt70YearsOfVictory=#5/9/20152:00:00PM#' дата 9 мая 2015 14:00:00otherValue=12.5' тип переменной Variant, подтип Double.otherValue="Википедия"' тип переменной Variant, подтип String.EndSub

Таблица основных типов Visual Basic 6.0

НаименованиеРазмер типаОписание типа данных
Byte1 байтБайт. Предназначен для хранения целых чисел от 0 до 255. Если переменной такого типа присвоить значение, выходящее за эти пределы, то Visual Basic сгенерирует ошибку времени выполнения.
Integer2 байтаЦелое. Предназначен для хранения целых чисел в диапазоне −32 768 до 32 767. Суффикс для обозначения типа «%».
Long4 байтаДлинное целое. Предназначен для хранения целых чисел в диапазоне −2 147 483 648 до 2 147 483 647. Суффикс для обозначения типа «&».
Single4 байтаС плавающей точкой одинарной точности. Диапазон от -3,402823E38 до -1,401298E−45 для отрицательных значений; от 1,401298E−45 до 3,402823E38 для положительных значений. Суффикс для обозначения типа «!»
Double8 байтС плавающей точкой двойной точности. Переменные этого типа позволяют хранить числа с точностью до 16 цифр и длиной до 300 символов. Диапазон значений варьируется от −1.80E+308 до 1.80E+308. Суффиксом является «#». Вычисления с ним являются приблизительными, так как используется бинарное представление числа согласно стандартаIEEE 754.
Decimal16 байтМасштабируемое целое. Этот тип использует десятичное представление чисел. Вычисления с ним, также как с типом Currency являются точными. Диапазон значений от −7.92E+28 до 7.92E+28. Нельзя напрямую объявить переменную с типом Decimal. Он может использоваться только как подтип для Variant и переменную можно привести к данному типу с помощью функции кастованияCDec.
Boolean2 байтаБулев тип данных может хранить только два значения: True либо False, истина или ложь. Истинное значение в VB соответствует целочисленной −1, а ложь равна 0, а при неявном приведении типа, любое численное значение отличное от нуля рассматривается как истина. Такое поведение позволяет использовать логические операторыAND,OR,NOT,XOR не только для булевой алгебры, но также и для битовых операций.[3]
String10 + 2*N байтСтрока переменной длины. Предназначен для хранения строковой (символьной) информации. Сама строка хранится в кодировкеUnicode, поэтому каждый символ кодируется 2 байтами. Если посмотреть тип изнутри, то используется дополнительно 4 байта для хранения указателя на строку, 4 байта для размера строки, а сама строка завершаетсянуль-символами (ещё 2 байта). Таким образом максимальный размер строки может достигать до 2 Гбайт. Суффикс типа «$».
String*N2*N байтСтрока постоянной длины. Также как и тип String хранит символьные данные, за исключением того, что размер данных фиксированный и указывается при объявлении переменной. Если значение строки слишком большое, то она усекается до необходимого размера. Если строка меньше чем требуется, то происходит выравнивание размера добавлением символа «пробела». Следует заметить, что фиксированные строки и массивы, а также структуры не могут быть больше 64 кб.
Date8 байтТип данных позволяет хранить значения времени и даты в промежутке от полуночи 1 января 100 года до полуночи 31 декабря 9999 года. Если переменной присвается только значение даты, то время равняется 00:00. Целочисленная единица представляет собой одни сутки. Это позволяет добавлять и вычитать даты используя только математические операторы, но для выполнения этих целей VB предоставляет специализированные функции работы с датами.
Object4 байтаИспользуется для хранения ссылки на объект. Присваивание переменной для этого типа происходит с помощью оператораSet. Сам тип является аналогом IDispatch, в нем хранится ссылка на интерфейс IDispatch. Для любого объекта нужно использовать IUnknown.
Currency8 байтДенежный. Данный тип может иметь до 4 цифр после запятой, и до 14 — перед ней. Значение представляют собой числа в десятичной системе счисления, а не в двоичной, как это происходит для типов с плавающей запятой одинарной и двойной точности. Таким образом вычисления будут произведены точно. Диапазон значений от −922 337 203 685 477,6000 до 922 337 203 685 477,6000. Данный тип является предпочтительным для проведения финансовых расчетов. Суффикс «@»
Variant16 байт / 22 байта+N байт / N-байтПеременная типа Variant может содержать данные любого типа, включая ссылки на объекты, пользовательские типы и массивы. Visual Basic автоматически производит необходимыепреобразования данных. Подтип содержащий число требует 16 байт памяти, а для хранения строковых данных 22 байта + длина самой строки. Диапазон значений равен диапазону значений подтипа. Данный тип самый медленный по скорости выполнения, так как требуется время на распаковку и упаковку значений.

Операторы

[править |править код]

Язык Visual Basic содержит множество операторов, которые отвечают за арифметические операции, операции сравнения и присвоения, а такжеконкатенации.

Оператор присвоения

  • Знак равенства (=) используется для присвоения значения переменной. Также возможно использование ключевого словаLet перед именем переменной. В ранних версиях языка BASIC его наличие было обязательным, но в Visual Basic он оставлен для совместимости. Для присвоения переменной объектного типа, необходимо наличие ключевого словаSet. Примеры:nVar = 10,Let iCount = 20,Set refDouble = objClass.

Многократное присваивание, так как это реализовано в языке C, невозможно.A = B = C не означает, чтоA,B иC будут иметь равные значения. VB оценит выражениеB = C и в переменнуюA присвоит результатTrue илиFalse, 0 или −1, в зависимости от типа.

Арифметические операторы

  • сложение (+), вычитание (-), умножение (*), деление (/)
  • возведение в степень (^). Пример:2 ^ 3 = 8
  • целочисленное деление (\). Делит первое число на второе, отбрасывая (не округляя) дробную часть. Пример:5 \ 2 = 2
  • деление по модулю (Mod). Делит первое число на второе, возвращая только остаток от деления. Пример:5 Mod 2 = 1

Операторы сравнения

  • равенство (=). Пример:If nVar = 10 Then
  • больше, чем и меньше, чем (> и <). Пример:If nVar > 10 Then
  • больше или равно и меньше или равно (>= и <=). Пример:If nVar >= 10 Then
  • не равно (<>). Пример:If nVar <> 10 Then
  • сравнение объектов (Is). Определяет, ссылаются объектные переменные на тот же объект или на разные. Пример:If obj1 Is obj2 Then
  • оператор подобия (Like). Сравнивает строковый объект с шаблоном и определяет, подходит ли шаблон. Пример:If strEmail Like "*@*.*" Then

Логические операторы

  • логическое И (And) — Обе части выражения должны быть истинными, чтобы всё выражение стало истинным. Пример:If (2 * 2 = 4) And (2 * 3 = 6) Then
  • логическое ИЛИ (Or) — должно быть истинным хотя бы одно из выражений. Пример:If (2 * 2 = 5) Or (2 * 2 = 4) Then
  • логическое отрицание (Not) — возвращаетTrue, если условие ложно и наоборот. Пример:If Not(2 * 2 = 5) Then
  • логическое исключение (Xor) — в выраженииE1 Xor E2 возвращаетTrue, если толькоE1 = True или толькоE2 = True, иначе —False.
  • эквивалентность (Eqv) — оценивает эквивалентность двух выражений, возвращаетTrue, если они имеют одинаковое значение.
  • импликация (Imp) — возвращаетFalse, еслиE1 = True иE2 = False, иначе —True.

Операторы конкатенации

  • Оператор (+) используется для конкатенации строк. Если обе части выражения имеют символьный тип, то операция склеивания строк будет успешной. Если одна из частей выражения, имеет числовой тип, но другая часть не может быть корректно преобразована к числу, то возникает ошибка приведения типов. Чтобы не допустить таких ситуаций, рекомендуется использовать соответствующие операторы для конвертации типов или применять оператор (&) для соединения строк.
  • Оператор (&) производит автоматическое преобразование выражений и значений в строковой тип. Например, выражениеstr = "10" & 20 даёт результат «1020», а не «30». Если бы использовали оператор (+) в данном выражении, то VB привел бы выражение «10» к числовому типу 10, и в случае успеха, произвёл бы арифметическое сложение.

Управляющие конструкции

[править |править код]

В Visual Basic, как и во многих языках программирования, существуют конструкции, предназначенные для управления порядком выполнения действий. Некоторые из конструкций, такие какGoSub иReturn, оставлены для совместимости с ранними версиями языка BASIC, но реализация в виде отдельных процедур может обеспечить более структурированный код.

Оператор ветвления

[править |править код]

Общий синтаксис:

'Запись оператора ветвления в одну строкуIf<условие>Then[действие_когда_условие_истинно]'Такая запись позволит выполнить действия в зависимости от истинности условияIf<условие>Then[действие_когда_условие_истинно]Else[действие_когда_условие_ложно]'Запись оператора ветвления в несколько строкIf<условие>Then[действие_когда_условие_истинно]ElseIf<условие2>Then[действие_когда_условие2_истинно]ElseIf<условиеN>Then[действие_когда_условиеN_истинно]Else[действие_когда_условие_ложно]EndIf

Оператор выбора

[править |править код]

Общий синтаксис:

SelectCase<проверяемое_значение>'Переменная или выражение, которое требуется проверить по одному или нескольким условиямCase<значение_1>'Выполняется действие, если проверяемое значение будет соответствовать значению 1[действие_1]Case<значение_2>,<значение_3>,<значение_3>'Проверяет список значений. Если найдено соответствие, то выполняется действие[действие_2]Case<значение_5>To<значение_6>'Проверяет диапазон значений[действие_3]CaseIs>=<значение_7>'Проверяет значение на истинность с условием[действие_4]CaseElse'Выполняется действие, если ни одно из условий не выполнится[действие_5]EndSelect

Пример: вывод различных сообщений в зависимости от значения переменной

'Введём переменную и дадим ей значение вручнуюDimXAsDoubleX=InputBox("Введите числовое значение переменной Х")SelectCaseX'Проверим, подходит ли некоторой воображаемой функции наше значениеCaseIs<5,Is>=20,12To15'Диапазон подходящих значенийMsgBox"Действительное значение для некоторой функции"CaseElse'Не подходящие значенияMsgBox"Значение не может быть использовано в некоторой функции"EndSelect

Цикл со счётчиком

[править |править код]

Общий синтаксис:

For<переменная>=<значение>To<конечное_значение>[Step<шаговое_значение>][блок_операторов][ExitFor]'Выход из циклаNext[переменная]

Пример: подсчёт суммы чётных чисел от 1 до 100

ForI=0To100Step2Sum=Sum+INext

Совместный цикл

[править |править код]

Общий синтаксис:

ForEach<переменная>In<коллекция>[блок_операторов][ExitFor]'Принудительный выход из циклаNext[переменная]

Пример: выводит на экран каждый элемент из массива

DimstrItemAsVariantForEachstrItemInArray("Яблоко","Груша","Слива")PrintstrItemNext

Цикл с условием

[править |править код]

Общий синтаксис:

DoWhile<условие>'Цикл выполняется, когда условие истинно[блок_операторов][ExitDo]'Принудительный выход из циклаLoopDoUntil<условие>'Цикл выполняется, когда условие ложно[блок_операторов][ExitDo]LoopWhile<условие>'Цикл выполняется, когда условие истинно[блок_операторов]Wend

Пример: Построчное чтение текстового файла

Open"file.txt"ForInputAs#1DoWhileNotEOF(1)'Возвратит True, если ожидается конец файлаLineInput#1,strBuffer'Чтение строки в переменнуюDebug.PrintstrBuffer'Вывод в окно отладкиLoopClose#1

Цикл с постусловием

[править |править код]

Общий синтаксис:

Do[блок_операторов][ExitDo]LoopWhile<условие>Do[блокоператоров][ExitDo]LoopUntil<условие>

Процедуры и функции

[править |править код]

Подпрограммы являются одними из основных элементов языка. Они представляют собой процедуры и функции.

  • Процедура начинается с оператораSub и заканчиваетсяEnd Sub, между которыми и помещается код. Процедуры могут вызываться или самим Visual Basic, например, реализованные в виде обработчиков событий, или другими процедурами и функциями. Имя процедуры обработки события состоит из имени объекта, знака подчёркивания и имени события:
PrivateSubCommand1_Click()'Событие будет вызвано при нажатии на элемент управления "Кнопка"...EndSubPrivateSubForm_MouseMove(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)'Вызывается при перемещении указателя мыши в окне формы...EndSub

На самом деле Visual Basic реализует цикл обработки оконных сообщений Windows. В примере с формой, цикл отфильтрует сообщениеWM_MOUSEMOVE и автоматически вызовет процедуруForm_MouseMove с параметрами: какие кнопки мыши были нажаты, координаты указателя. Данный механизм скрывает от разработчика некоторые аспекты программирования в среде Windows, позволяя ему сразу приступить к написанию коммерческого кода. В большинстве случаев, класс решаемых задач не потребует от программиста знаний о сообщениях и оконных функциях. Но Visual Basic не ограничивает программиста самому реализовать обработку оконных сообщений. Это позволяет очень гибко подходить к построению приложений, но и потребует достаточного опыта для написания подобного кода, который может вызвать нестабильную работу программы вплоть до аварийного завершения.

  • Функции в VB начинаются с ключевого словаFunction и заканчиваютсяEnd Function. Возвращаемое значение функции присваивается переменной, совпадающее с названием функции. Для того, чтобы досрочно прервать выполнение процедуры или функции, существуют специальные операторыExit Sub иExit Function. Visual Basic 6.0 содержит встроенные функции для работы с файловой системой, датой и временем, математические функции, функции взаимодействия с системой, функции для работы со строками, функции приведения типов и функции осуществляющие финансовые расчёты. Также существуют недокументированные функции, которые позволяют работать, например, с указателями.

Пример функции для решения квадратного уравнения:

PrivateSubMain()DimRetX1AsDouble,RetX2AsDoubleDimstrStatusAsStringstrStatus=SolveQuadraticEquation(4,6,2,RetX1,RetX2)'Решение уравнения 4*X^2 + 6*X - 2 = 0'Выводим ответMsgBox"Решение: "&strStatus&vbCrLf&_"X1 = "&RetX1&vbCrLf&_"X2 = "&RetX2,vbInformationEndSub'Функция решения квадратного уравненияPublicFunctionSolveQuadraticEquation(ByValAAsDouble,_ByValBAsDouble,_ByValCAsDouble,_ByRefX1AsDouble,_ByRefX2AsDouble)AsStringDimDAsDoubleD=(B*B)-(4*A*C)'Получаем значение дискриминантаIfD>=0ThenX1=(-B-Sqr(D))/(2*A)'Вычисляем корни уравненияX2=(-B+Sqr(D))/(2*A)SolveQuadraticEquation="Решение получено"'Функция возвращает сообщение о решенииElseSolveQuadraticEquation="Дискриминант < 0. Корней нет"EndIfEndFunction

В этом примере можно заметить модификаторByVal перед аргументамиA,B иC. Это способствует тому, что параметры в функцию будут переданыпо значению. МодификаторByRef, напротив, передаётзначение по ссылке. Для такого типа модификатора, функция может модифицировать значения переменных, переданных в качестве параметров. Visual Basic по-умолчанию всегда передаёт значенияпо значениюByVal[4], если ни один из модификаторов не был указан.

Модули и классы

[править |править код]

Программный код в Visual Basic хранится в модулях. Существуют всего три вида модулей: модуль формы (Form), стандартный модуль (Module) и модуль класса (Class Module).

  • Модуль формы (расширение файла *.frm) является основой большинства приложений Visual Basic. Модуль формы содержит процедуры обработки события, общие процедуры и объявленные на уровне формы: переменные, константы, типы и внешние процедуры. Если открыть модуль формы в текстовом редакторе, можно увидеть описания формы и её элементов управления, включая их свойства. Код, размещённый в модуле формы, может ссылаться на другие формы или объекты приложения.
  • Стандартный модуль (расширение файла *.bas) является контейнером для процедур, функций и объявлений, к которым обычно получают доступ другие модули приложения. Они могут содержать глобальную переменную (доступную всему приложению) или описанные на уровне модуля: переменные, константы, типы, внешние и глобальные процедуры. Код, размещённый в стандартном модуле, может быть не связан с определенным приложением; если не использовать ссылки на модуль формы или имена элементов управления, стандартный модуль может быть использован в других приложениях.
  • Модуль класса (расширение файла *.cls) является основой объектно-ориентированного программирования в Visual Basic. Модуль класса используется для создания новых объектов. Эти объекты могут иметь собственные свойства, методы и события. Фактически, форма — просто модуль класса, который может содержать элементы управления, помещенные в него, и выводить их на экран. Классы могут содержать специальные процедурыClass_Initialize иClass_Terminate, которые фактически являютсяконструктором идеструктором.

Объектно-ориентированное программирование

[править |править код]

Простое взаимодействие между объектами является одним из базовых составляющих парадигмы Visual Basic. Сам объект называют экземпляромкласса. Объектная модель VB предоставляет различные классы для работы с формами, элементами управления, буфером обмена, коллекциями, экраном и т. д. Для взаимодействия с другими объектамикласс предоставляет разработчикуинтерфейс, состоящий изсвойств,методов исобытий.

Создание нового объекта из класса возможно ранним или поздним связыванием. Для раннего связывания используется ключевое словоNew перед именем класса. Для позднего связывания используется функцияCreateObject, возвращающая ссылку на созданный объект. Присваивание ссылок осуществляется в переменные с типомObject, используя операторSet. Доступ к методам и свойствам класса происходит через оператор точку., который ставится сразу после имени переменной объектного типа. Если класс содержит события, то переменные объявляются с ключевым словомWithEvents, тем самым будут доступны процедуры обработки событий.

Пример показывает взаимодействие программы с библиотекойMicrosoft Scripting Runtime, предоставляющей объекты для работы с файловой системой:

PublicSubMain()DimobjFSOAsNewFileSystemObject'Создаём экземпляр класса, используя оператор NewDimobjWindowsAsFolderSetobjWindows=objFSO.GetFolder(Environ("SYSTEMROOT"))'Вызываем метод класса GetFolder и присваиваем ссылку на полученный объектMsgBox"Папка Windows: "&objWindows.Path'Читаем свойства классаMsgBox"Дата создания: "&Format(objWindows.DateCreated,"YYYY-MM-DD H:mm:ss")DimsTextFilePathAsStringDimobjTSAsTextStreamsTextFilePath=objFSO.BuildPath(Environ("TEMP"),"Тестовый файл.txt")'Метод с двумя параметрам возвращает значение типа StringSetobjTS=objFSO.CreateTextFile(sTextFilePath,True)objTS.Write"Привет, Википедия!"objTS.CloseobjFSO.DeleteFilesTextFilePath,TrueSetobjFSO=Nothing'Присваивая Nothing, происходит освобождение ссылки, и объект может вызвать процедуру деструктораSetobjWindows=Nothing'VB автоматически вызывает деструктор, если на объект больше не ссылаютсяSetobjTS=NothingEndSub

Visual Basic позволяет разработчику самому создавать новые классы. В отличие от других языков программирования, таких как Java и C++, Visual Basic имеет неполную поддержку ООП.

Как известно,абстрактный класс необходим, чтобы предоставить шаблон для интерфейса другим классам. В Visual Basic классы имеющие члены класса, но не содержащие реализацию, можно использовать в качестве абстрактных классов, но фактически они ими не являются. Из классов Visual Basic всегда можно создать объекты, даже если они не содержат кода[5]

Принципинкапсуляции действует в Visual Basic. Чтобы разграничить доступ к членам класса, служат модификаторыPublic,Private иFriend, используемые при описании процедур, функций, констант, переменных и пользовательских типов.

Наследование реализации не поддерживается. Visual Basic обеспечивает только поддержку наследования интерфейса через операторImplements. При наследовании интерфейса любой класс может действовать как базовый класс интерфейса. Вообще любой класс, может выступать как базовый класс интерфейса.

Полиморфизм обеспечивается только через интерфейсы, так как наследование VB не поддерживает. Реализация полиморфизма показана на примере классовАвтомобиль иСамолёт реализующие интерфейс классаТранспорт.

'Класс ITransport.clsPublicFunctionGetMaxSpeed()AsLongEndFunction
'Класс CAuto.clsImplementsITransport'Наследуем интерфейсPrivateFunctionITransport_GetMaxSpeed()AsLong'Реализация методаITransport_GetMaxSpeed=240EndFunction
'Класс CFly.clsImplementsITransportPrivateFunctionITransport_GetMaxSpeed()AsLongITransport_GetMaxSpeed=700EndFunction
'Стандартный модуль Program.basOptionExplicitPublicSubMain()DimTAsITransport'Объявляем переменную с типом ITransportSetT=NewcAutoWhatTransportSpeedT'Передаем ссылку в процедуру, которая вызовет нужный метод класса, в зависимости от реализацииSetT=NewcFlyWhatTransportSpeedTEndSub'Функция имеет аргумент, который принимает ссылку на объект, реализующий интерфейс ITransportPublicSubWhatTransportSpeed(TransportAsITransport)MsgBox"Максимальная скорость: "&Transport.GetMaxSpeed()EndSub

Дизайнер форм

[править |править код]
Пазлинка и перо
Этопустой раздел, которыйещёне написан.
Здесь может располагатьсяотдельный раздел. Помогите Википедии, написав его.(5 июня 2015)

Редактор кода

[править |править код]
Этот разделнужно дополнить.
Пожалуйста,улучшите и дополните раздел.(5 июня 2015)

Редактор кода представляет собой текстовый редактор с дополнительными функциями для простого и быстрого ввода исходного кода:

  • Подсветка синтаксиса исходного кода.
  • Горизонтальное разделение окна на 2 панели.
  • Показ всего исходного кода или конкретной процедуры.
  • Перечислений объектов используемых в программе со списком событий, которые разработчик может обработать.
  • Автоизменение регистра букв. Первая буква ключевых слов указываются в верхнем регистре, регистр имён переменных автоматически изменяется, чтобы соответствовать регистру, которое было задано при их объявленени.
  • Автодополнение названий функций, процедур, переменных используяIntelliSense.
  • Проверка кода на наличие синтаксических ошибок.
  • Умнаятабуляция блоков

Отладка

[править |править код]
Visual Basic 6.0 в режиме отладки

Интегрированная среда разработки предоставляет программисту богатые возможности для отладки программ. Одно из преимуществ Visual Basic, заключается в возможности изменять в значительной мере исходный код программы без её полной перекомпиляции и перезапуска. Во время отладки процедур, разработчику предоставляется возможность перемещать маркер, указывающий на текущую выполняемую инструкцию, как вперёд — пропуская часть кода, так и назад — заставляя VB заново исполнять уже отработанные инструкции.

Кроме всего прочего, среда предоставляет инструменты для отладки, такие как окно немедленного выполнения (Immediate Window), окно локальных переменных (Locals Window), окно наблюдения (Watch Window), окно просмотрастека вызовов процедур (Call Stack). Такие продвинутые средства позволяют программисту проводить глубокий анализ исследуемого алгоритма в отлаживаемом приложении.

Visual Basic переходит в режим отладки при выполнении одного из условий:

  • При выполнении инструкцииStop
  • При выполнении инструкции, на которую установленаточка останова (брейкпоинт)
  • При возникновении ошибки, для которой не найден подходящий обработчик ошибок
  • При нажатии горячих клавишCtrl +Break
  • удобное программирование

Компиляция

[править |править код]

В комплекте с интегрированной средой разработки идёт компилятор вP-Code (P-код), нативныйBack-End x86-совместимыйкомпилятор исвязной (линковщик). Наличие двух компиляторов позволяет отнести Visual Basic как компилируемому, так и интерпретируемому языку. Вне зависимости от того, какой из компиляторов будет выбран, приложения требуют для своего запуска виртуальную машину времени выполнения Visual Basic, которая представляет собой библиотеку MSVBVMXX.DLL, где XX — версия языка[6]

  • P-код позволяет выполняться приложению на аппаратно-независимой виртуальной машине, которая в реальном времени будет транслироватьпсевдо-код программы в машинный код процессора. Теоретически, такой подход позволяет осуществить переносимость приложений на новые аппаратные платформы не требуя доработки исходного кода самих программ. Одно из главных преимуществ, связанное с компиляцией в P-Code, является «горячее» изменение исходного кода в режимеотладки. Visual Basic, находясь в режиме отладки, всегда компилирует программу в P-код, далее выполнение может быть приостановлено, программистом вносятся значительные изменения в исходный код, а затем продолжается выполнение: полная перекомпиляция и перезапуск приложения при этом не требуется. Компилятор создаёт исполняемый файл в форматеPE, но вместо инструкций для реального процессора, содержится код инициализирующий виртуальную машину и байт-код приложения. Главным недостатком компиляции в P-код является низкая скорость выполнения программ, так как большая часть времени тратится на трансляцию программы в машинный код.
  • Native-компиляция стала возможна с выходом Visual Basic 5.0. Данный компилятор позволяет создавать высокопроизводительный код по сравнению с приложениями, которые были собраны в P-код. В машинный код компилируются большинство инструкций: арифметические операции, управляющие конструкции, но такие действия, как вызов встроенных функций языка, работа со строками, обработка ошибок будут выполняться библиотекой времени выполнения Visual Basic. Таким образом, несмотря на компиляцию в машинный код, приложение для своего выполнения будет требовать виртуальную машину Visual Basic. Также частый вызов функций из библиотеки времени выполнения приводит к ухудшению скорости выполнения приложения. Но несмотря на все недостатки, Native-компилятор обеспечивает приемлемую скорость выполнения кода. Компилятор содержит несколько параметров оптимизации. На вкладке компиляции проекта можно отключить некоторые проверочные операции: выход за пределы массива, целочисленное переполнение и др. Правильная настройка этих параметров позволяет разработчику получить дополнительный прирост производительности в разрабатываемом приложении.

Развёртывание

[править |править код]

Совместно с Microsoft Visual Basic 6.0 поставляется Package & Deployment Wizard[7], предназначенный для создания установочных пакетов на основе проекта Visual Basic. В сравнении со своим хорошо известным предшественником — Setup Wizard, P&D Wizard предоставляет новую функциональность, но, к сожалению, новый инструмент содержит некоторые ошибки. Одной из проблем данного приложения является ошибка преобразования даты, если локаль установленная в операционной системе пользователя будет отличной от американской. Существуют сторонние приложения, которые предоставляют более продвинутые средства для управления установочными пакетами.

Также возможен вариант установки VB-приложений простым копированием, который сводится к выполнению нескольких шагов:

  • Если в системном каталоге операционной системы отсутствует файл времени выполнения приложений Visual Basic (MSVBVM60.DLL), то необходимо предварительно его скопировать туда.
  • Если приложение содержит нестандартные элементы управления, такие какActiveX Controls, то предварительно необходимо их скопировать в системный каталог и произвести регистрацию в системном реестре Microsoft Windows. Регистрацию компонент можно автоматизировать, например, выполнить командуregsvr32.exe и передать полный путь к файлу или программным способом, непосредственно вызвав методDllRegisterServer, который реализуетCOM-совместимая компонента.
  • Создать программную папку, скопировать исполняемый файл, при необходимости создать ярлык приложения на рабочем столе пользователя.

Дополнительные возможности

[править |править код]

ActiveX (Элементы управления OCX)

[править |править код]

Начиная с версии VB 5.0 разработчику предоставляется возможность не только использовать готовые компонентыActiveX, но и создавать свои. VB берёт на себя всю работу по созданию вспомогательного кода, который предназначен для регистрации информации о компоненте в системном реестре, реализации интерфейса IDispatch, создания уникальныхGUID, используемых в качестве идентификаторов для классов (CLSID), интерфейсов (IID) и библиотек типов (LIBID). Благодаря такому подходу от программиста потребуется только создать классы с необходимым функционалом.

Создание новых GUID класса и интерфейса зависит от установленного параметра совместимости на вкладке свойств проекта. Он может принимать одно из трех состояний:

  • Без совместимости — Visual Basic создает новые идентификаторы интерфейса и класса каждый раз при построении или компиляции проекта. Каждое построение компоненты может использоваться только с приложениями, созданными для работы с конкретной версией этой компоненты, то есть если имя класса и проекта не будет изменено во время компиляции, то сгенерируются новые идентификаторы и они перепишут информацию в реестре, таким образом приложения, ссылающиеся на старые идентификаторы, не смогут запуститься.
  • Совместимость на уровне проекта — параметр предназначен для поддержания совместимости во время тестирования, чтобы после создании компоненты было поведение такое же, словно установлен параметр без совместимости.
  • Двоичная совместимость — при компиляции проекта Visual Basic создает новые идентификаторы при необходимости. Сохраняются идентификаторы класса и интерфейса из предыдущих версий компоненты. Изменение реализации метода не меняет идентификаторы. Также добавление нового класса и методов не изменяет существующей интерфейс. Таким образом старые приложения могут использовать старый интерфейс компоненты, а новые приложения могут ссылаться на новую версию интерфейса. Если изменяется метод или удаляется из интерфейса, то VB предупредит о несоответствии с интерфейсом компоненты и рекомендует произвести перекомпиляцию приложений.[8]

После завершения компиляции на выходе будет двоичный файл библиотеки по спецификацииCOM. Данный компонент реализует как минимум 2интерфейса: IUnknown и IDispatch. Библиотека типов (TLB) будет интегрированна внутри ресурсов исполняемого файла. Также дополнительно создаются файлы с полезной информацией, такие как EXP и LIB.

Windows API (Прикладной интерфейс программирования)

[править |править код]

Visual Basic предоставляет языковые средства для декларации и вызова функции из библиотек динамической компоновки (DLL). Данный механизм позволяет расширять приложения, за счёт использования дополнительных библиотек предоставляемых другими разработчиками, в том числе написанные на различных языках программирования. Один из таких наборов библиотек предоставляется операционной системой Microsoft Windows.

Общий синтаксис декларации функции и процедуры выглядит следующим образом:

[Public|Private]DeclareSub<имя_процедуры>lib"имя_динамической_библиотеки"[Alias"псевдоним"][(параметры)][Public|Private]DeclareFunction<имя_функции>lib"имя_динамической_библиотеки"[Alias"псевдоним"][(параметры)][Asтип_возврата]

Псевдонимы необходимо задавать в ряде случаев: использование в названии функции зарезервированных идентификаторов Visual Basic, название содержат недопустимые символы или не могут быть правильно интерпретированы средой. Вызываемые функции должны поддерживатьсоглашение о вызовеStdCall.

При передаче параметра с типом String в функцию WINAPI, VB осуществляет автоматическую конвертацию кодировки изUnicode в ANSI, после выполнения функции, происходит обратная конвертация из ANSI в Unicode. Чтобы исключить автоматическую конвертацию строк, аргументы функции необходимо задекларировать с типом Long, и передавать указатель на строку, используя функциюStrPtr, таким образом можно оптимизировать производительность приложения выполняющее множественные вызовы функций.

Пример вызова Windows API для получение полного пути к каталогу Windows и вывода сообщения на экран:

PrivateDeclareFunctionGetWindowsDirectoryLib"kernel32.dll"Alias"GetWindowsDirectoryA"(ByValbufferAsString,ByValnSizeAsLong)AsLongPrivateDeclareFunctionMessageBoxLib"user32.dll"Alias"MessageBoxA"(ByValhWndAsLong,ByVallpTextAsString,ByVallpCaptionAsString,ByValwTypeAsLong)AsLongPrivateConstMB_ICONASTERISKAsLong=64PublicSubMain()DimbufferAsString'Переменная в которую будет получен результат функции.DimretLenAsLongbuffer=String(256,vbNullChar)lens=GetWindowsDirectory(buffer,Len(buffer))'Вызов функцииbuffer=Left(buffer,lens)MessageBox0&,"ОС установлена в каталог: "&buffer,"Информация",MB_ICONASTERISK'Вызов функцииEndSub

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

Достоинства и недостатки

[править |править код]

Достоинства

[править |править код]
  • Высокая скорость создания приложений сграфическим интерфейсом для MicrosoftWindows.
  • Простойсинтаксис языка обеспечивает низкий порог вхождения.
  • Возможностькомпиляции как вмашинный код, так и вP-код (по выбору программиста).
  • Безопасность типов обеспечивает защита от ошибок, связанных с применением указателей и доступом к памяти. Этот аспект делает Visual Basic приложения более стабильными, но также является объектом критики.
  • Возможность использования большинстваWinAPI функций[9] для расширения функциональных возможностей приложения. Данный вопрос наиболее полно исследованДэном Эпплманом, написавшим книгу «Visual Basic Programmer’s Guide to the Win32 API».

Недостатки

[править |править код]
  • Поддержка операционных систем только семействаWindows иMac OS X (Исключение — VB1 forDOS).
  • Отсутствие полноценного механизманаследования реализации объектов[10]. Существующее в языке наследование позволяет наследовать толькоинтерфейсы, но не их реализацию.
  • Практически все встроенные функции языка реализованы через библиотекувремени исполнения, которая, в свою очередь, производит много «дополнительной» работы по проверке и/или преобразованию типов, что замедляет скорость работы приложений.

Язык сильно привязан к своей среде разработки и к операционной системе Microsoft Windows, являясь исключительно инструментом написания Windows-приложений. Привязка к среде заключается в том, что существует большое количество средств, предназначенных для помощи и удобства программирования: встроенный отладчик, просмотр переменных и структур данных на лету, окно отладки, всплывающие подсказки при наборе текста программы (IntelliSense). Все эти преимущества делают бесполезным и даже невозможным использование Visual Basic вне среды разработки, например в обычном текстовом редакторе

Критика

[править |править код]
  • Частокритике подвергаются такие аспекты Visual Basic, как возможность отключить средства слежения за объявленнымипеременными, возможность неявногопреобразования переменных, наличиетипа данных «Variant». По мнению критиков, это даёт возможность писать крайне плохойкод. С другой стороны, это можно рассматривать как плюс, так как VB не навязывает «хороший стиль», а даёт больше свободыпрограммисту.
  • Отсутствиеуказателей, низкоуровневого доступа к памяти,ASM-вставок, невозможность экспорта функций в нативных библиотеках, отсутствие стандартных средств разработки консольных приложений. Несмотря на то, чтопарадигма Visual Basic позволяет среднему VB-программисту обходиться без всего этого, перечисленные вещи также нередко становятся объектами критики. И хотя, используя недокументированные возможности и определённые ухищрения, всё это можно реализовать и на VB (например, с помощью функций для получения указателейVarPtr,StrPtr иObjPtr); пользоваться этими трюками иногда сложнее, чем, например, наC++.

Однако стоит отметить, что все недостатки языка вытекают из его основного достоинства — простоты разработки графического интерфейса. Поэтому многие программисты используют Visual Basic для разработки интерфейса пользователя, а функциональность программы реализуют в виде динамически подключаемых библиотек (DLL), написанных на других языках (например,C++).

Реализации и диалекты

[править |править код]

Visual Basic for Applications (VBA)

[править |править код]
Основная статья:VBA

Это среда разработки практически не отличается от классического Visual Basic, которая предназначена для написаниямакросов и других прикладных программ для конкретных бизнес-приложений. Наибольшую популярность получил благодаря своему использованию в пакетеMicrosoft Office. Широкое распространение Visual Basic for Applications в сочетании с изначально недостаточным вниманием к вопросам безопасности привело к широкому распространениюмакровирусов.

Особенности:

  • Не позволяет компилировать приложения в исполняемые файлы EXE/DLL
  • Для выполнения бизнес-приложений в современной среде требуются корректные настройки безопасности макросов в приложении, которое являетсяхостом для VBA
  • Отсутствуют некоторые объекты, такие как:Clipboard,App,Form,Timer,Data. Вместо них предоставляются другие классы, реализованные в объектной модели конкретного приложения.

Visual Basic Scripting Edition (VBScript)

[править |править код]
Основная статья:Visual Basic Scripting Edition

Скриптовый язык, являющийся несколько усечённой версией обычного Visual Basic. Используется в основном для автоматизации администрирования системMicrosoft Windows, а также для создания страницASP и сценариев дляInternet Explorer.

Особенности:

  • Отсутствуют операторы для работы с файловой системой
  • Нет возможности объявить переменную с конкретным типом данных. Все переменные имеют типVariant
  • Возможно использовать толькопозднее связывание для работы с внешними библиотеками
  • Компиляция кода в исполняемые файлы отсутствует
  • Исходный код хранится в текстовых файлах с расширением.vbs или.vbe

eMbedded Visual Basic (eVB)

[править |править код]

Данный инструмент используется для разработки программного обеспечения под операционные системыWindows CE иWindows Mobile. Включает в себя интегрированную среду разработки, отладчик и эмулятор для тестирования приложений. eMbedded Visual Basic базируется не на полнофункциональном языке программирования Visual Basic, а на языке описания сценариевVisual Basic Scripting Edition. Приложения компилируются в P-код, а исполняемые файлы имеют расширениеVB, которые ассоциированы с хост-приложением.

Особенности:

  • Все переменные по умолчанию относятся к виду Variant; строгий контроль типов не поддерживается
  • Разработка ActiveX-элементов управления не поддерживается, но возможно использование готовых
  • Ряд встроенных элементов управления Visual Basic не поддерживается, некоторые свойства отсутствуют
  • Требуется наличие библиотек eMbedded Visual Basic Runtime для запуска приложений

См. также

[править |править код]

Примечания

[править |править код]
  1. Microsoft заявила, что прекратит развитие Visual Basic в качестве языка . Дата обращения: 18 марта 2020. Архивировано 29 марта 2020 года.
  2. Visual Basic support planned for .NET 5.0 . Дата обращения: 18 марта 2020. Архивировано 5 января 2022 года.
  3. https://msdn.microsoft.com/en-us/library/aa242751(v=vs.60).aspxАрхивная копия от 22 декабря 2015 наWayback Machine MSDN, Visual Basic 6.0, Language Reference, оператор And
  4. KathleenDollard. Passing Arguments by Value and by Reference - Visual Basic (амер. англ.). learn.microsoft.com (15 сентября 2021). Дата обращения: 19 февраля 2024. Архивировано 18 декабря 2023 года.
  5. В. Сергеев. Visual Basic 6.0. Наиболее полное руководство для профессиональной работы в среде Visual Basic. С. 493.
  6. https://support.microsoft.com/en-us/kb/229415Архивная копия от 6 марта 2016 наWayback Machine Visual Basic Supports P-Code and Native Code Compilation.
  7. The Package and Deployment Wizard. Visual Basic Concepts. Visual Studio 6.0 (англ.). MSDN. Microsoft. Дата обращения: 29 апреля 2017. Архивировано 22 ноября 2016 года.
  8. https://support.microsoft.com/ru-ru/kb/161137 Использование проектной и бинарной совместимости
  9. 16-разрядные версии могут обращаться к Win16 подсистеме, а 32-разрядные версии — к Win32.
  10. Отсутствие наследования реализации — особенность технологииCOM, а не самого VB, который лишь отражает эту особенность.

Рекомендуемая литература

[править |править код]


Перейти к шаблону «Диалекты языка программирования Basic»
Диалекты языка программированияБейсик
Классические
Переходные
Процедурные
Объектные
Мобильные
Консольные
Источник —https://ru.wikipedia.org/w/index.php?title=Visual_Basic&oldid=150421795
Категории:
Скрытые категории: