Общие сведения о синтаксисе Visual Basic. Синтаксис basic


Общие сведения о синтаксисе Visual Basic

  • 06/08/2017
  • Время чтения: 2 мин

В этой статье

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

Синтаксис метода Activate

object . Activate

В синтаксисе метода Activate слово "object", написанное курсивом, является заполнителем для предоставляемых данных — в данном случае это код, возвращающий объект. Необходимо четко придерживаться написания слов, выделенных полужирным шрифтом. Например, следующая процедура активирует второе окно в активном документе.

Sub MakeActive() Windows(2).Activate End Sub

Синтаксис функции MsgBox

MsgBox( prompt [ , buttons ] [ , title ] [ , helpfile, context ] )

В синтаксисе функции MsgBox выделенные курсивом слова являются именованными аргументами функции. Аргументы, заключенные в квадратные скобки, использовать не обязательно. (Не указывайте квадратные скобки в коде Visual Basic.) Единственный обязательный аргумент для функции MsgBox — это текст для пояснения.

Аргументы функций и методов можно указывать в коде двумя способами: по позиции или по имени. Чтобы указать аргументы по позиции, придерживайтесь порядка, представленного в синтаксисе, отделяя каждый аргумент запятой. Например:

MsgBox "Your answer is correct!",0,"Answer Box"

Чтобы указать аргументы по имени, необходимо после имени аргумента поставить двоеточие и знак равенства ( := ), а затем задать значение аргумента. Именованные аргументы можно указывать в любом порядке, например:

MsgBox Title:="Answer Box", Prompt:="Your answer is correct!"

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

В примере ниже возвращаемое значение функции MsgBox представляет собой число, обозначающее выбранную кнопку, которая хранится в переменной myVar. Так как используется возвращаемое значение, скобки обязательны. Значение переменной отображается в другом окне сообщения.

Sub Question() myVar = MsgBox(Prompt:="I enjoy my job.", _ Title:="Answer Box", Buttons:="4") MsgBox myVar End Sub

Синтаксис оператора Option

Option Compare { Binary |Text |Database }

В синтаксисе оператора Option Compare фигурные скобки и вертикальная черта обозначают обязательный выбор между тремя элементами. (Не используйте фигурные скобки в операторе Visual Basic). Например, этот оператор указывает, что строки модуля будут сравниваться в порядке сортировки без учета регистра.

Option Compare Text

Синтаксис оператора Dim

Dim varname [ ( [ subscripts ] ) ] [ As type ] [ , varname [ ( [ subscripts ] ) ] [ As type ]] . . .

В синтаксисе оператора Dim слово Dim — это ключевое слово, которое необходимо использовать. Единственным обязательным элементом является элемент varname (имя переменной). Например, оператор создает три переменные: myVar , nextVar и thirdVar , которые автоматически объявляются переменными типа Variant.

Dim myVar, nextVar, thirdVar

Например, в примере ниже показано объявление переменной типа String. Добавление типа данных экономит память и помогает находить ошибки в коде.

Dim myAnswer As String

Чтобы объявить несколько переменных в одном операторе, включите тип данных для каждой переменной. Переменным, объявленным без типа данных, автоматически назначается тип Variant.

Dim x As Integer, y As Integer, z As Integer

В этом операторе переменным x и y назначается тип данных Variant. Переменная z — единственная, которой присваивается значение типа Integer.

Dim x, y, z As Integer

При объявлении переменной массива необходимо использовать скобки. Подстрочные знаки в этом случае не обязательны. Следующий оператор определяет размеры динамического массива myArray.

Dim myArray()

msdn.microsoft.com

Основные операторы basic.

Мы рассмотрим несколько основных операторов языка.

CLS – очищает экран. Формат CLS[{0,1,2}]

Очищает либо текстовую, либо графическую области просмотра. Если была установлена графическая области просмотра (с помощью VIEW), то очищает только графическую область просмотра. В противном случае очищает текстовую область просмотра или весь экран.

0 – полностью очищает экран

1 - очищает графическую область просмотра или весь экран, если графическая область просмотра не была установлена.

2 – очищает текстовую область просмотра.

INPUT–оператор производит операцию ввода информации с клавиатуры дисплея в оперативную память.

Этот оператор используется для диалога между пользователем и компьютером.

Пример:

Команда в программе Результат на экране монитора.

INPUT k ?

INPUT “k=”,k k=

INPUT k1, k2, k3 ?

INPUT a1$, k1, a2$, k2 ?

В результате действия оператора, в первом случае, на экране дисплея появится «?» и машина будет ждать ввода числа «К» с клавиатуры, т.е. надо ввести с помощью клавиатуры нужное число и нажать на клавишу ввода (ENTER).

Количество вводимых данных должно соответствовать количеству переменных в списке. Если введено недостаточное количество значений, то компьютер вновь выводит знак «?» и ждет дополнительного ввода данных. Избыточные значения игнорируются. В третьем и четвертом примере показано, что с помощью одного оператора можно вводить как несколько чисел, так и сочетания разных типов констант.

REM–оператор позволяет включать комментарий в программу.

Формат: REM<произвольный текст>.

Оператор REM относится к невыполняемым операторам и не оказывает никакого влияния на порядок работы программы. Он используется только на уровне транслятора. Его единственная задача появится в листинге, и помочь своим текстом расшифровать фрагмент программы.

PRINT–Оператор обеспечивает вывод информации на дисплей, как числовой, так и символьной.

Пример1: PRINT «Исходные данные»

PRINT X,Y

В результате выполнения 1го оператора PRINT на экране будет напечатан текст «исходные данные», начиная с первой позиции строки экрана, во втором случае напечатаются значения «X» и «Y», из памяти на момент их печати.

Пример 2: PRINT «Значение Х=»;Х, «Значение Y=»;Y

Этот пример демонстрирует одновременное применение в операторе печати текста и значение числа, если на момент печати X и Y соответственно равны, например 50 и 70, то после выполнения этого оператора на дисплее будет напечатано: значение X=50 значение Y=70

Для вывода информации на принтер используют следующую форму оператора: LPRINT.

Оператор LET–оператор присвоения значения выражения, стоящего справа от знака = , переменной стоящей слева от знака =.

Переменная и выражение должны быть или оба числовыми или оба символьными.

Имя оператора LET может быть опущено.

Пример:

10 LET A=1

10 A=1

100 X= X*2+B

В операторе 100 происходит вычисление переменной X по формуле X=X*2+B, причем, здесь, заранее должно быть присвоено значение переменных X и B в программе.

ОператорDATA–служит для предварительной подготовки и хранения в памяти значений исходных данных.

Формат оператора: DATA <список констант>

Константы в списке разделяются между собой запятыми.

Пример: DATA 10,20,5,0.5

В программе может быть несколько операторов DATA. Интерпретатор объединяет их всех в один блок в том порядке, в каком они встречаются в программе. Операторы могут стоять в любом месте программы.

ОператорREAD–осуществляет ввод данных, значения которых представлены в операторе DATA.

Формат оператора: READ<список переменных>

Пример: DATA 10,20,5,0.5

READ A,B,S,D

После выполнения этих операторов переменные примут следующие значения

A=10, B=20, C=5, D=0.5, E=начало, F=конец.

Оператор GOTO – оператор безусловного перехода.

Оператор осуществляет переход к выполнению другого оператора, записанного в строке с указанным номером.

Формат оператора: GOTO<№ оператора куда перейти>

Пример:

  1. GOTO 200 т.е. перейти к оператору с номером 200

studfiles.net

7 Хпи. Экмм. Курс «сппр». Лабораторные работы. Справочник по vba Краткий справочник по vba Работа в редакторе vba

Редактор VBA вызывается из меню: Сервис\Макрос\Редактор Visual Basic (или сочетаниие клавиш Alt-F11). Возвратиться из редактора VBA в рабочую книгу можно нажатием кнопки Вид Microsoft Excel (View Microsoft Excel), или тем же сочетанием клавиш (Alt-F11).

Работа с элементами управления на рабочих листах Excel

На рабочем листе для добавления элементов управления необходимо отобразить панель инструментов «Элементы управления»:

.

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

После создания элемента управления повторное нажатие кнопки режима конструктора выключает этот режим.

Синтаксис языка vba

Основные отличия синтаксиса языка VBA от синтаксиса языка Паскаль:

- точка с запятой ";" не ставится

- оператором присвоения является символ равно =

- комментарии отделяются верхней одинарной кавычкой ' или зарезервированным словом Rem

- ссылка на ячейку в программе (например, А3):

Worksheets("имя листа").Cells(3,1).Value

или так:

Worksheets("имя листа").Range("А3").Value

А для текущего листа просто:

Cells(3,12).Value

или так:

Range("А3").Value

- цикл завершается специальным словом Next

Описание процедуры

[Public l Private] Sub ИмяПроцедуры (СписокФормальныхПараметров)

ОператорыТелаПроцедуры

End Sub

Типы данных

В VBA имеется много различных типов данных.

В таблице представлены типы, которые наиболее часто используются:

Тип

Описание

Integer

Single

Double

String

Date

Variant

Целое число

Число с плавающей точкой одинарной точности

Число с плавающей точкой двойной точности

Текстовая строка

Дата и время

Любое значение из перечисленных выше

Значение текстового поля на форме имеет строковый тип. Поскольку текстовые поля используются для ввода данных (в частности и числовых), которые в дальнейшем могут участвовать в ходе выполнения программы в различных вычислениях, то во избежание ошибок вычислений необходимо введенные данные преобразовывать к числовому типу. Для этого в VB имеется ряд функций, представленных в таблице. (где х – выражение).

Функции преобразования типов

Функция

Тип результата

CInt (x)

Integer

CBool (x)

Boolean

CByte (x)

Byte

CCur (x)

Currency

CDate (x)

Date

CDbl (x)

Double

CLng (x)

Long

CSng (x)

Single

CVar (x)

Variant

CStr (x)

String

Описание переменных

Инструкция Dim предназначена для описания типа данных переменной на уровне модуля или процедуры. Например, следующая инструкция описывает переменную с типом integer:

Dim N As Integer

Инструкция Dim предназначена также для описания объектного типа переменных. Далее приводится описание переменной для нового экземпляра рабочего листа:

Dim X As New Worksheet

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

Каждая переменная должна описываться отдельно! Ниже только вторая переменная определена как целого типа, первая имеет тип данных variant:

Dim M, N As Integer

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

studfiles.net

Офисное программирование. Синтаксис VBA/.

Приводятся начальные сведения об синтаксических принципах языка и организации программы на VBA. Типы данных. Операторы.

1 Основные синтаксические принципы языка программирования Visual Basic For Application

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

- любой текст до конца строки после одинарной кавычки – апострофа (') или слова Rem считается комментарием, он никак не влияет на программу, а только объясняет ее человеку-читателю;

- символьные значения заключаются в двойные кавычки (") Внимание! Это другой символ, не повторенная два раза одинарная кавычка!

- максимальная длина любого имени (переменной, константы, процедуры) – 255 символов;

- длина имени макроса 80 символов для Word и 64 символа для Excel;

- в именах могут использоваться символы латиницы и кириллицы, символ подчеркивание и символы цифр;

- имена, состоящие из латинских символов не чувствительны к регистру, состоящие из символов кириллицы – чувствительны;

- имена должны начинаться с буквы, не должны содержать знаков препинания (кроме подчеркивания), должны быть уникальны в зоне видимости, не должны совпадать с зарезервированными словами;

- в строке можно записать несколько операторов, разделяя их двоеточием, например

А=1: в=2

- для продолжения оператора в следующей строке, в конце предыдушей строки ставится пробел и символ «_» подчеркивания.

2 Структура программы

Уже отмечалось, что программа на VBA существует только вместе с документом.

Документ с программой образуют проект ( Project ). Все открытые в данный момент проекты (их столько же, сколько открытых в данный момент документов) можно увидеть в окне редактора Project Explorer . Окно открывается командой меню редактора View - Project Explorer или клавишами Ctrl +R .

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

Любой модуль состоит из области описаний ( Declarations ) и области кода ( Code).

В области описаний размещают директивы компилятора и описывают переменные, массивы и другие объекты доступные для всей программы. Никакие исполнимые операторы в области описания находиться не могут!

Настоятельно рекомендуется в области описаний разместить директиву компилятора: Option Explicit, которая требует, чтобы все переменные в мảкросе были явно объявлены. Эта команда будет вставляться в модуль автоматически, если в меню редактора Tools – Option установить на вкладке Editor флажок Require Variable Declaration .

В области кода размещают все операторы программы.

Рисунок 2-1. Структура проекта VBA.

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

- типа Sub (подпрограмма) либо

- типа Function (функция).

Отличие этих процедур в том, что Function (функция) обязательно возвращает результат своей работы в вызывающую процедуру.

В VBA нет понятия «главная процедура». Все процедуры равноправны, их иерархия устанавливается исключительно логикой проекта. Все процедуры модуля находятся на одном иерархическом уровне, нет вложенности процедур. Связь проектов между собой возможна, но не очевидна.

3 Объявление данных

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

<Доступность> имя переменной As <Тип>

Формально в VBA описания данных не обязательны, тип данных определяться автоматически из смысла выполняемых операций. Но это требует дополнительных затрат времени и не рационально расходует память. Поэтому рекомендуется все данные определять до того, как они будут использоваться.

Для определения видимости переменных используется ключевые слова Dim, Public, Private, Static. Если переменная должна быть доступна только в том элементе (процедуре или модуле), в котором она объявлена, то следует использовать объявление Dim. Объявление Public в области Declarations сделает переменную доступной всем модулям проектам, при использовании внутри процедур оно действует так же, как Dim.

Тип переменной объявляется одновременно с видимостью с помощью ключевого слова As < Тип >, где <Тип> один из нескольких сотен допустимых в VBA типов. Большая часть этого многообразия относится к объектам, доступным в программе. Базовые типы, определенные в VBA:

числовые

целые: Byte, Integer, Long ;

вещественные : Single, Double, Currency;

дата и время: Data ;

строковый: string ;

логический: Boolean ;

объектный: Object ;

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

Несколько примеров объявлений переменных:

Dim Summa As Double

Dim i,j,k As Long

Public Autor As String

Dim Otchet_1 As Word.Document

4 Операторы и операции

Оператор – наименьший элемент кода VBA. Оператор может объявить переменную, установить режим обработки программы (компиляции) или выполнить какое-то действие в программе.

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

А=1: в=2.5

Записаны два оператора в одной строке. Действия: присвоить переменной А значение 1, переменной в – значение 2,5. Обратите внимание: разделитель целой и дробной части – символ «точка» (.).

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

В VBA семь арифметических операторов.

+ сложение;

- вычитение;

* умножение;

/ деление;

\ целочисленное деление: остаток отбрасывается, результат не округляется;

mod остаток от целочисленного деления;

^ возведение в степень.

Логические данные могут принимать одно из двух значений:

True – истина;

False – ложь

Эти значения получаются как результат применения операторов отношений:

= равно (обратите внимание, что знак «=» используется двояко: в операторах присваивания он означает «поместить значение, вычисленное выражением справа от знака =, в контейнер (переменную), записанную слева от знака». В операторах сравнения знак означает «сравнить значения выражений слева и справа от знака и, если они равны, вернуть значение True, иначе вернуть значение False)»;

< меньше;

> больше;

<= меньше равно;

>= больше равно

<> не равно.

Для данных строкового типа при сравнении учитывается регистр и пробелы.

Для логических данных определены логические операции:

And И, Конъюнкция (соединение, логическое умножение), результат: истина, когда истинны оба операнда.

Or ИЛИ, дизъюнкция (разделение, логическое сложение), результат истина, когда истинен одни или оба операнда

Xor Исключающее ИЛИ, результат истина, когда истиннен один из операндов.

Not Отрицание,меняет логическое значение на противоположное.

Для строковых данных определена единственная операция – конкатенация, объединение нескольких строк в одну, символ операции: & или +. Различие в использовании разных символов для одной и той же операции состоит в том, что в первом случае данные, участвующие в операции будут (если это возможно) автоматически преобразованы к строковому типу.

Кавычки служат для обозначения строковых данных, они не являются частью значения строкового данного.

Примеры:

str ="первая" & " и вторая " + "строка",

результат:

"первая и вторая строка"

Команда:

" Text " & 34

в результате даст

Text 34

Команда

" Text " + 34

– даст сообщение об ошибке Type mismatch – смешаны типы. В подобных случаях следует использовать функции преобразования текста в строку, как показано ниже

Команда

" Text " + cStr (34)

даст корректный результат:

Text 34

5 Массивы

Массив – совокупность однотипных данных. К каждому элементу массива доступ осуществляется по его номеру (индексу). Индекс массива указывается в круглых скобках.

Dim MyArray (2) As Integer

- объявлен массив из трех элементов, т.к. нумерация элементов массива по умолчанию начинается с 0.

Чтобы индексация начиналась с единицы, в области Declaration следует указать;

Option Base 1

Dim MyArray(2) As Integer

- объявлен массив из 2-х элементов

или

Dim MyArray (1 To 2) As Integer

Матрица (двумерный – с двумя индексами –массив):

Dim Matric (2,2) As Byte

' матрица 3*3 по умолчанию (0, 1, 2), например, Matric (1,2)=0 (присвоение значения 0 2-му элементу третьей строки матрицы)

Dim Matric(1 To 2, 1 to 2) As Byte

' определена матрица 2*2

Динамические массивы (размерность заранее не определена):

Dim Vect() As Single

' сначала объявляется массив без указания размерности

ReDim Vect(1 To 10)

' в нужный момент –определяется размерность, при этом массив очищается.

Если используется слово Preserve :

ReDim Preserve Vect (1 To 15)

то сохраняются прежние значения элементов и добавляются пустые элементы.

Функции LBound и UBound возвращают значение границ массива

LBound(Vect ) вернет 1

UBound(Vect) вернет 15

Для многомерных нужно еще указать измерение, границы которого определяются:

LBound ( Matric ,1)

LBound ( Matric ,2)

Одновременное создание и заполнение массива с помощью функции Array :

Dim MyMatr

MyMatr = Array (100,200,300,400,500)

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

Коллекции – это специальные объекты, предназначенные для хранения наборов одинаковых элементов. Они изначально безразмерны (не нужно определять размерность). Для коллекции определены метод Add () – добавление элемента в коллекцию, метод Item ( nom )– для получения ссылки на нужный элемент, свойство Count – возвращающее количество элементов в коллекциии метод Remove ( nom ) для удаления элемента из коллекции, nom –выражение, задающее номер элемента в коллекции, нумерация ведется с единицы.

6 Контрольные вопросы

1. Что будет получено в результате выполнения оператора:rezult="Иванов" & "Иван" & "Иванович"

2. Сколько элементов можно сохранить в описанном ниже массиве

Dim Vector (12) As Integer

3. Какие диапазоны значений у данных указанных типов:

Byte

Integer

Long

Single Double Currency

alural.narod.ru

Синтаксическая ошибка | Microsoft Docs

  • 06/08/2017
  • Время чтения: 2 мин
  • Соавторы

В этой статье

Visual Basic не может определить, какое действие необходимо выполнить.Visual Basic can't determine what action to take. Эта ошибка имеет следующие причины и решения:This error has the following causes and solutions:

  • Неправильно написано ключевое слово или аргумент.A keyword or argument is misspelled.

    Ключевые слова и имена именованных аргументов должен полностью совпадать указано в спецификации их синтаксис.Keywords and the names of named arguments must exactly match those specified in their syntax specifications. Справка в Интернете проверьте и исправьте написание.Check online Help, and then correct the spelling.

  • Неправильный знаков препинания.Punctuation is incorrect. К примеру при размещения опустить дополнительные аргументы, которые необходимо заменить запятой (****,) как заполнитель для пропущенный аргумент.For example, when you omit optional arguments positionally, you must substitute a comma (,) as a placeholder for the omitted argument.

  • Не определена процедура.A procedure isn't defined.

    Проверьте правильность написания имени процедуры.Check the spelling of the procedure name.

  • Вы указали необязательно и ParamArray в объявлении процедуры.You tried to specify both Optional and ParamArray in the same procedure declaration. Аргументом ParamArray не может быть не обязательно.A ParamArray argument can't be Optional. Выберите один и удалите другое.Choose one and delete the other.

  • Предпринята попытка определить процедуру с параметром ParamArray или не обязательно .You tried to define an event procedure with an Optional or ParamArray parameter. Удалите ключевое слово Optional или ParamArray спецификации параметра.Remove the Optional or ParamArray keyword from the parameter specification.

  • Предпринята попытка использовать именованный аргумент в оператор RaiseEvent .You tried to use a named argument in a RaiseEvent statement. События не поддерживают именованные аргументы.Events do not support named arguments.

Для получения дополнительной информации выберите необходимый элемент и нажмите клавишу F1 (для Windows) или HELP (для Macintosh).For additional information, select the item in question and press F1 (in Windows) or HELP (on the Macintosh).

msdn.microsoft.com

Бейсик — WiKi

Предпосылкой к появлению Бейсика стали повышение доступности компьютеров в 1960-х годах и появление возможности работы в режиме разделения времени (time-sharing). К компьютерам получили доступ учащиеся и специалисты, не являющиеся подготовленными программистами, но нуждающиеся в решении на компьютере своих задач.

Рождение

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

Бейсик был спроектирован так, чтобы студенты могли без затруднений писать программы, используя терминалы с разделением времени. Он предназначался для более «простых» пользователей, не столько заинтересованных в скорости исполнения программ, сколько просто в возможности использовать компьютер для решения своих задач, не имея специальной подготовки.

При проектировании языка использовались следующие восемь принципов. Новый язык должен был:

  1. быть простым в использовании для начинающих;
  2. быть языком программирования общего назначения;
  3. предоставлять возможность расширения функциональности, доступную опытным программистам;
  4. быть интерактивным;
  5. предоставлять ясные сообщения об ошибках;
  6. быстро работать на небольших программах;
  7. не требовать понимания работы аппаратного обеспечения;
  8. защищать пользователя от операционной системы.

Язык был основан частично на Фортране II и частично на Алголе 60, с добавлениями, делающими его удобным для работы в режиме разделения времени и, позднее, обработки текста и матричной арифметики. Первоначально Бейсик был реализован на мейнфрейме GE-265 с поддержкой множества терминалов. Вопреки распространённому убеждению, в момент своего появления это был компилируемый язык.

Рост

Несмотря на то, что язык уже использовался на нескольких мини-компьютерах, его настоящее распространение началось с его появления на микрокомпьютере Альтаир 8800. Многие языки программирования были слишком большими, чтобы поместиться в небольшую память, которую пользователи таких машин могли себе позволить. Для машин с таким медленным носителем, как бумажная лента (позднее — аудиокассета), и без подходящего текстового редактора такой небольшой язык, как Бейсик, был отличной находкой.

В 1975 году Microsoft (тогда это были лишь двое: Билл Гейтс и Пол Аллен — при участии Монте Давидова), выпустила Altair BASIC. Затем его версии появились на другой платформе под лицензией, и скоро в использовании были уже миллионы копий и вариантов: один из вариантов, Applesoft BASIC, стал стандартным языком на Apple II. Для операционной системы CP/M был создан диалект BASIC-80, надолго определивший развитие языка.

В 1979 году Microsoft обсуждала с несколькими поставщиками компьютеров (включая IBM) лицензирование интерпретатора Бейсик на их машинах. Одна из версий (ROM BASIC) была включена в ПЗУ IBM PC: компьютер мог автоматически загружаться в Бейсик. Так как IBM не придавала тогда большого значения персональным компьютерам (основным полем её деятельности были мейнфреймы), то вопреки своим принципам она разрешила Microsoft продавать интерпретатор отдельно. Это сделало последнюю пионером в выпуске ПО нового поколения — не привязанного к конкретной аппаратуре и поставляемого отдельно от компьютера.

Бейсик в полной мере испытал на себе такое хорошо известное в 1970–1980 явление, как массовое размножение версий и диалектов языка высокого уровня, в значительной степени несовместимых между собой. Причин этому было несколько. Поскольку язык не рассматривался как промышленный, никаких специальных усилий по его стандартизации не прилагалось и для каждого компьютера создавалась своя реализация. В эти же годы появилось большое количество 8-битных домашних и учебных компьютеров, строившихся на базе процессоров типа Intel 8080 (советский аналог — КР580ВМ80А) или Z80, на которых Бейсик был основным (или единственным доступным) языком высокого уровня. Каждая модель компьютера имела определенные аппаратные и программные особенности, специфические средства вывода звука и графики, нестандартные инструменты ввода, для поддержки которых в реализации Бейсика вводили специальные команды и конструкции. Иногда прямо в Бейсике реализовались низкоуровневые средства программирования, такие как непосредственная работа с физической памятью или обработка аппаратных прерываний. Поэтому если в базовой части (минимальный стандартный набор операторов и консольный последовательный ввод-вывод) большинство реализаций были в основном аналогичны, то в части вывода звука, графики и более сложного управления текстовой консолью (управление цветами, создание подобия оконного ввода-вывода) они почти наверняка оказывались несовместимыми. В результате только наиболее распространенных версий и диалектов Бейсика было более десятка, а общее число зачастую несовместимых реализаций не уступало количеству типов и разновидностей компьютеров, находящихся в эксплуатации.[источник не указан 1511 дней]

Зрелость

Периодом наибольшего расцвета и развития исходного Бейсика можно считать конец 1970-х — первую половину 1980-х годов. В этот период практически все персональные компьютеры имели собственный интерпретатор Бейсика, зачастую зашиваемый в ПЗУ, который в простейших компьютерах нередко выполнял также функции операционной системы. Практически все более мощные компьютеры также имели интерактивные Бейсик-системы. Характерно, что практически не было компиляторов Бейсика, абсолютное большинство реализаций представляли собой стандартный гибрид строчного редактора и интерпретатора. Недовольство примитивизмом исходного Бейсика порождало попытки улучшить и базовые средства языка, что привело к появлению в некоторых реализациях сложных операторов ветвления, дополнительных видов циклов, именованных процедур с параметрами.

Было создано несколько новых версий Бейсика для платформы IBM PC. Microsoft продавала Бейсик для MS-DOS/PC DOS, включая IBM Advanced BASIC (BASICA), GW-BASIC (модификация BASICA, не требующая «прошивки» от IBM) и QuickBASIC. Borland, первоначально вышедшая на рынок со своим известным Turbo Pascal, в 1985 году выпустила основанную на той же программной среде систему Turbo Basic 1.0 (его наследники впоследствии продавались другой компанией под именем PowerBASIC). Некоторые другие языки использовали хорошо известный синтаксис Бейсика в качестве основы, на которой строилась совершенно иная система (см. например, GRASS). Стремление увеличить производительность Бейсик-программ привело к появлению полноценных компиляторов (каким был, например, упомянутый Turbo Basic), а также «гибридных» систем, в которых при сохранении интерпретации как основной методики исполнения программы была реализована частичная компиляция «на лету», например, компиляция коротких циклов. Кроме того, по крайней мере, на платформе IBM распространилась псевдокомпиляция бейсик-программ, когда транслятор переводил Бейсик-программу в псевдокод (нередко — обратимый) и формировал исполняемую программу из объектного модуля интерпретатора и кодированного модуля с текстом программы. Такая программа запускалась и исполнялась как обычная компилированная объектная программа, хотя по сути оставалась интерпретируемой.

В середине 1980-х Бейсик стал основным языком в сложных моделях программируемых калькуляторов, которые как раз к этому времени достигли мощности, допускающей применение полноценного языка высокого уровня. Сам факт, что многие производители, не сговариваясь, выбрали в качестве основы языка высокого уровня калькуляторов именно Бейсик, лучше всего говорит о распространённости и популярности этого языка в указанное время. Так, Бейсик был встроен в советский калькулятор «Электроника МК-85» и все его более поздние модели. Применение Бейсика в качестве основного языка высокого уровня программируемых калькуляторов продолжается по сей день; в настоящее время именно «калькуляторный» Бейсик более всего похож на изначальный вариант 1960-80х годов, например, реализация для калькуляторов CITIZEN содержит всего 14 ключевых слов (не считая математических функций) и допускает только односимвольные имена переменных.

К концу 1980-х годов персональные компьютеры стали намного мощнее и предоставляли возможности (такие, как графический интерфейс пользователя), использование которых в Бейсике было уже не столь удобным. К тому же появление на компьютерах «учебного» и «домашнего» класса недорогих трансляторов промышленных языков (прежде всего — Паскаля и Си), сопровождаемых удобными средами программирования и полезными библиотеками (например, Borland Pascal с библиотекой Turbo Vision) создало Бейсику сильную конкуренцию. Бейсик начал сдавать позиции, несмотря на то, что огромное количество его версий ещё использовалось и продавалось. В это же время началось стремительное изменение облика тех Бейсик-систем, которые оставались в эксплуатации. Происходил постепенный «дрейф» в сторону признанных структурных языков: расширился словарь и набор конструкций языка, появились сложные ветвления, именованные подпрограммы и функции, длинные имена переменных. Кроме того, возросшие возможности персональных компьютеров позволили отказаться от характерных особенностей Бейсика, введённых для обеспечения эффективной интерактивной работы за текстовым терминалом: числовых меток у каждой строки и построчного редактирования.

Вторую жизнь Бейсик получил с появлением Visual Basic от Microsoft. Хотя и трудно согласиться, что этот язык — действительно Бейсик; он явился логическим завершением эволюции языка и, несмотря на сохранение привычных ключевых слов, по структуре и набору возможностей ближе к Паскалю, чем к первоначальному Бейсику. Но как инструмент для быстрого создания практически полезных программ для Windows при невысокой квалификации программиста он оказался очень кстати и быстро стал одним из наиболее используемых языков на платформе Windows. Не последнюю роль здесь сыграла удачная реализация включённого в систему построителя графического интерфейса пользователя, скрывавшая от разработчика детали программирования Windows GUI и позволявшая сосредоточиться на задаче. Microsoft создала вариант под названием WordBasic и использовала его в MS Word до появления Word 97. Вариант Visual Basic for Applications (VBA) был встроен в Microsoft Excel 5.0 в 1993 году, затем в Access 95 в 1995 году, а после и во все остальные инструменты, входящие в пакет Microsoft Office. Internet Explorer 3.0 и выше, а также Microsoft Outlook, включали интерпретатор VBScript.

Синтаксис языка напоминает Фортран и многие элементы — явные заимствования из него. Язык задумывался для обучения, поэтому его конструкции максимально просты. Как и в других языках программирования, ключевые слова взяты из английского языка. Основных типов данных два: строки и числа. С появлением версии Visual Basic, а также различных его модификаций (таких как VBA), в языке появились многие другие типы данных и дополнения, типичные для современных языков программирования (например, такие, как объектная модель). Объявление переменных не требует специальной секции (в отличие от Паскаля). Объявление переменной — это первое её использование.

Ранние версии Бейсика (такие как BASICA, GW-BASIC) существенно отличаются от современных диалектов и сегодня практически не используются.

Ранние версии

  Экран с Бейсиком компьютера ДВК

Внешний вид программ на ранних версиях Бейсика во многом определялся тем, что он предназначался для среды программирования со строчным редактором текста. В таком редакторе пользователь не имел возможности отображать весь текст на экране (в окне), перемещаться по нему в любых направлениях с помощью клавиатуры и/или мыши. В строчных редакторах пользователь для изменения строки текста должен дать команду изменения строки с заданным номером, затем ввести новый текст указанной строки. Для вставки новой строки нужно дать команду вставки, опять-таки указав номер. Вводимые строки отображаются на экране последовательно (независимо от номеров). Чтобы увидеть сделанные изменения, применяется команда вывода текста, которая выводит строки в правильном порядке (по возрастанию номеров).

Всё это отразилось в Бейсике. Каждая строка начиналась с номера. При вводе в редактор строка оказывалась в исходном тексте программы на позиции, соответствующей её номеру. Для вставки новой строки нужно было дописать строку с номером, находящимся в диапазоне между номерами двух других строк. «Раздвинуть» строки было невозможно, если требовалось вставить новую строку между строками с соседними номерами, приходилось повторно вводить эти строки с другими номерами, чтобы обеспечить разрыв в нумерации (либо применять специальную команду RENUM, которая перенумеровывала все уже введённые строки с постоянным шагом, синхронно изменяя все команды переходов). Для упрощения оперативного редактирования программы сложилась практика нумеровать строки с шагом 10 — это позволяло практически во всех случаях вставлять новые строки без изменения номеров ранее введённых. Например, чтобы добавить третью строку между строками 20 и 30, нужно было написать строку с номером в диапазоне от 21 до 29. Типичная строка из программы на Бейсике выглядела так:

Изменять вручную номера уже имеющихся строк было небезопасно, так как номера выполняли роль меток для оператора GOTO. Ранее в Бейсике были допустимы только числовые метки для этого оператора, и наличие в каждой строке уникального номера делало возможным безусловный переход к любой из них. Числовые метки и активное использование GOTO было неизбежным при программировании на Бейсике, что способствовало плохой структуре кода и в больших проектах приводило к запутыванию самих авторов. Был даже придуман шуточный термин «макаронное программирование» (spagetti code), потому что логика программы с частыми переходами GOTO напоминает тарелку со спагетти.

Признаком конца оператора служил конец строки. Чтобы на одной строке разместить несколько операторов, нужно поставить между ними двоеточие (это разрешалось не во всех реализациях языка). Имена переменных в большинстве диалектов могли состоять только из одной буквы, после которой можно было добавить одну цифру, что также не способствовало улучшению понимания кода. Для создания переменной строкового типа нужно было после имени указать знак доллара ($). Переменная без этого знака являлась числовой (с плавающей точкой). Было ещё несколько модификаторов, относящихся к числовому типу: знак процента (%) — целый тип, восклицательный знак (!) — обычная точность, октоторп (#) — двойная точность (для данных с плавающей точкой, то есть десятичных дробей). В некоторых версиях числовые модификаторы могли не применяться или применяться не все. В абсолютном большинстве программ использовался только базовый числовой тип.

Выражения сходны с большинством других процедурных языков программирования, но в первых вариантах Бейсика их набор был довольно бедным. В самых ранних вариантах число ключевых слов не достигало даже 20. Вот набор основных программных конструкций и интерактивных команд, которые были реализованы практически в любой Бейсик-системе конца 1970-х годов:

  • LIST — Вывод на монитор текста программы в правильной последовательности строк. В зависимости от реализации команда поддерживала параметры — диапазон строк, который требуется вывести. Иногда поддерживался вариант LLIST — вывод на печатающее устройство.
  • RUN — Запуск текущей программы с первого оператора строки с самым маленьким номером. Мог поддерживаться параметр — номер строки, с которого нужно начинать исполнение.
  • REM — Комментарий. Текст, находившийся после ключевого слова и до конца строки, на исполнение программы не влиял. Многие интерпретаторы также поддерживали в качестве знака начала комментария одиночную кавычку '.
  • INPUT "Приглашение: ", Переменная — Вывод на монитор текста "Приглашение: " и ожидание, пока пользователь не введёт значение и не нажмёт Enter. После этого в Переменную запишется введённое значение. В простейших реализациях приглашение в INPUT не поддерживалось и его нужно было выводить отдельным оператором PRINT (см. ниже).
  • PRINT «Текст»;Переменная;Переменная;«Текст» — Вывод на монитор последовательно перечисленных объектов (текста и значений переменных). В зависимости от реализации, по-разному воспринимались разделители: в одних случаях разделитель приводил к выводу хотя бы одного пробела, в других — значения выводились подряд и разделители нужно было добавлять вручную. Разделитель «;» выполнял также функцию подавления перевода на следующую строку.
  • CLS — Очистка экрана терминала. В зависимости от реализации, конструкции и режима работы терминала текстовый курсор переносился либо в верхний левый, либо в нижний левый угол.
  • LET — Присваивание (формат «LET Переменная = Значение»). В абсолютном большинстве версий оператор LET поддерживался, но был факультативным — присваивания переменным значений записывались без LET).
  • DIM — Описание массива. В отличие от обычных переменных, массивы требовали описания. Максимальное число размерностей массива определялось только реализацией
  • DATA — Набор данных, размещаемых прямо в тексте программы (аналог константы или массива-константы).
  • READ — Команда считывания из набора DATA.
  • GOTO Lbl — Команда безусловного перехода на метку Lbl.
  • ON… GOTO — Команда вычисляемого перехода — после ON должно было идти вычисляемое выражение или переменная, а после GOTO — набор меток через запятую. Значение выражения указывало номер метки, на которую нужно перейти.
  • IF … THEN … — Обычный оператор ветвления. После IF размещается логическое условие, после THEN — оператор, который должен быть выполнен при истинности этого условия. Для сокращения записи многие реализации поддерживали соглашение — если после THEN идёт число, то это — метка, на которую нужно перейти, то есть форма «IF … THEN 150» равнозначна «IF … THEN GOTO 150». Также могли поддерживаться формы «IF … GOTO…»
  • FOR ПеременнаяЦикла=НачальноеЗначение TO КонечноеЗначение STEP Шаг — Заголовок цикла с шагом. Инициирует цикл, в котором Переменная последовательно проходит ряд значений от НачальноеЗначение до КонечноеЗначение с шагом Шаг. Тело цикла ограничивается заголовком и ключевым словом NEXT. Часть STEP могла опускаться — в этом случае шаг был равен единице. Когда ПеременнаяЦикла выходит за указанные пределы, происходит переход за соответствующий оператор NEXT.
  • NEXT — Завершение тела цикла с шагом. Оператор показывает, что необходимо перейти на заголовок текущего исполняемого цикла FOR и продолжить работу. В более развитых реализациях NEXT мог содержать список переменных цикла через запятую — это означало, что в данной точке программы завершается тело не одного, а нескольких циклов. Применение NEXT с переменной также страховало от нарушения логики программы, так как вызывало ошибку времени выполнения, если при выполнении этой команды оказывалось, что активен цикл не по той переменной, имя которой указано.
  • WHILE Условие — Заголовок цикла с предусловием. Цикл завершался, если условие оказывалось ложно. В этом случае происходил переход за соответствующий заголовку оператор WEND.
  • WEND — Завершение тела цикла WHILE. Аналог NEXT но для цикла с предусловием.
  • GOSUB Метка — Переход к подпрограмме, начинающейся с Метки. Возврат происходит при достижении оператора RETURN. Рекурсивный вызов процедуры был, как правило, запрещён и приводил к ошибке времени выполнения.
  • RETURN — Оператор возврата из подпрограммы. Выполняется безусловный переход на оператор, следующий за командой GOSUB, которой был произведён переход к подпрограмме.
  • END — Завершение выполнения программы. Система выходит в интерпретатор и пользователю выдаётся приглашение на ввод команд.
  • CHAIN — Загрузка диапазона строк программы с внешнего носителя.
  • OPEN — Открытие файла данных на внешнем носителе.
  • CLOSE — Закрытие файла данных на внешнем носителе.
  • GET — Последовательное чтение значений указанных переменных из файла с перемещением файлового указателя за последний считанный символ.
  • PUT — Последовательная запись значений указанных переменных в файл с перемещением файлового указателя за последний записанный символ.
  • DELETE — Команда интерактивного режима — удаление строки с указанным номером.
  • SAVE — Команда интерактивного режима — сохранение текущей программы в файле на внешнем носителе.
  • LOAD — Команда интерактивного режима — загрузка в память программы из файла на внешнем носителе. Как правило, по умолчанию она приводила к уничтожению ранее загруженной программы и данных.
  • RENUM — Команда интерактивного режима — перенумерация всех или заданного диапазона строк программы начиная с заданного числа с указанным шагом. По умолчанию — перенумеруются все строки программы с шагом 10.

Условный оператор (IF..THEN) изначально имел только одну ветвь — ветвь ELSE в нём отсутствовала и моделировалась с помощью безусловного перехода. Так, в нижеследующей программе выполняется элементарная операция — ввод числа и вывод сообщения «Отрицательное число» или «Положительное число или нуль» в зависимости от его значения:

10 INPUT I 20 IF I >= 0 THEN PRINT "Positive number or null" : GOTO 40 30 PRINT "Negative number" 40 END

Имелся оператор перехода по вычисляемой метке ON..GOTO (унаследованный от аналогичной конструкции Фортрана) — в нём после ON указывалось числовое выражение, а после GOTO — список номеров строк. Переход происходил на строку, номер которой в списке соответствовал значению выражения. Присутствуют также циклы (цикл со счётчиком FOR и цикл с предусловием WHILE).

Использование функций, определяемых пользователем (участков кода, для многократного использования), было возможно двумя способами: определяемые функции и подпрограммы.

Подпрограммы не являлись аналогом функций таких языков, как Си или Паскаль, так как не имели имён и не могли принимать и/или возвращать параметры. Параметры и результаты передавались через глобальные переменные (все переменные в ранних версиях Бейсика были глобальными). Подпрограммы писались обычно в конце модуля, с нумерацией заведомо большей, чем планируемое количество строк (к примеру, нумерация блока подпрограмм могла начинаться с 5000, даже если в программе была пара сотен строк). Подпрограммы не имели заголовков и имён, и ничем не отличались от любого другого участка кода. Вызов подпрограммы осуществлялся с помощью ключевого слова GOSUB <метка>. Это практически клон GOTO, за исключением одного: возврат в точку вызова происходил автоматически, при достижении в подпрограмме ключевого слова RETURN. GOSUB, как и GOTO, только способствовали плохой структуре кода, так как отследить выполнение программы, содержащей большое количество безусловных переходов и подпрограмм, было сложной задачей. Рекурсия не допускалась.

Отсутствие возможности давать подпрограммам имена (и передавать по ним управление), невозможность передачи параметров, отсутствие локальных переменных, использование только числовых меток в больших проектах вызывало путаницу в коде и очень затрудняло отладку.

В некоторых диалектах Бейсика имелась возможность загрузить файл с кодом непосредственно при выполнении программы (текущий при этом выгружался) оператором CHAIN. Это была одна из самых полезных возможностей языка, так как она позволяла разбить большой проект на модули, вызывая их в порядке необходимости.

Редактора кода в ранних версиях, как такового, не было. При запуске интерпретатора Бейсика запускался диалоговый режим ввода команд. Для работы в этом режиме были предусмотрены специальные команды, которые не являлись операторами самого языка (их нельзя было включить в код программы). Это команды по управлению средой ввода, такие как: LIST <диапазон строк> — вывод листинга программы на экран (LLIST — на принтер), SAVE <имя файла> — сохранение текста программы в файл, LOAD <имя файла> — загрузка кода в память и т. д. Запуск программы производился вводом команды RUN. В большинстве интерпретаторов Бейсика в нижней части экрана была строка с этими (и другими) командами.

Если команда начиналась с номера строки (метки), она запоминалась в памяти как часть вводимой программы. Если строка оператора вводилась без номера, она выполнялась сразу же, после нажатия клавиши ↵ Enter. В качестве первых уроков обучающимся на Бейсике предлагалось поэкспериментировать с таким режимом, когда результат выполнения выражения был виден сразу. Например, если, находясь в режиме диалога, ввести строку PRINT 2+2 и нажать ↵ Enter, на экране отобразится результат сложения.

Для редактирования уже введённой строки в большинстве реализаций нужно было перепечатать её полностью. Удаление строк производилось командой DELETE <диапазон строк>. Команда RENUM — позволяла восстановить шаг 10 в нумерации строк. Часто возникала ситуация, что штатного шага 10 для будущих строк не хватало (так как такой шаг позволяет добавить лишь 9 строк между требуемыми) и тогда команда RENUM была необходимой (все строки перенумеровывались с шагом 10, и соответствующим образом корректировались строки с GOTO под новую нумерацию строк).

Для выполнения программы на Бейсике использовалась передача имени файла с кодом программы интерпретатору в командной строке. В этом случае после загрузки кода команда RUN (начать выполнение программы) вызывалась автоматически.

Фрагмент типичной программы на Бейсике:

10 CLS 'Очистка экрана 20 PRINT "Добро пожаловать!" 'Заголовок в первой строке 30 'Цикл, выводящий линию под заголовком, на всю ширину экрана 40 FOR I=1 TO 80 50 PRINT "="; 60 NEXT I 65 'Ввод символьных данных от пользователя (комментарий добавлен после ввода нижних строк) 70 INPUT "Имя: ",N$ 80 INPUT "Фамилия: ",S$ 90 INPUT "Отчество: ",T$ 95 'Вырезаем копию первых символов из имени и отчества 100 N2$=LEFT$(N$,1) 110 T2$=LEFT$(T$,1) 120 'Выводим результат 130 PRINT "Ваше имя кратко: ";S$;" ";N2$;". ";T2$;"." 140 INPUT "Повторить программу? (Y/N) ",U$ 150 IF U$="Y" THEN GOTO 10 160 END

Точка с запятой выполняет функцию подавления перехода на новую строку после оператора PRINT. Ключевое слово END означает завершение программы. Оно необязательно, в его отсутствие программа завершалась после исполнения последнего оператора, но было полезно в случаях, когда имелась секция подпрограмм, либо программа имела несколько возможных точек завершения (в последнем случае либо в каждой такой точке ставили END, либо END был один, а на него делались переходы в других местах).

Поздние версии

Одним из наиболее распространённых вариантов языка Бейсик стала реализация интерпретатора QBasic корпорации Microsoft. Долгие годы она включалась как бесплатное приложение, входящее в операционные системы MS-DOS и ранних Windows. В нём имелись довольно мощные графические и звуковые возможности, позволяющие создавать на этом языке даже игры.

Бейсик поздних версий (начиная с Turbo Basic и Visual Basic) резко отличается от ранних вариантов. Фактически, это новый язык, который во многом ближе к Фортрану или Паскалю, чем к исходному Бейсику. Основные изменения версий 1990-х годов состоят в следующем:

  • Отказались от представления программы как неструктурированного набора пронумерованных строк. Номера строк превратились в обычные метки, которые стали необязательными и перестали влиять на порядок исполнения программы. Если ранее строка с номером 15 всегда шла в программе раньше строки с номером 20, то теперь порядок исполнения стал определяться порядком расположения строк в исходном коде. Метки перестали быть только числовыми.
  • В языке появились именованные подпрограммы с параметрами, механизм вызова подпрограмм стал обычным: подпрограмма вызывается по имени, с указанием списка фактических параметров.
  • Появилась рекурсия.
  • Были введены структурные управляющие конструкции, в результате для организации обычных ветвлений и циклов перестало быть необходимым использование оператора GOTO и меток строк.
  • Существенно расширилась номенклатура типов данных, появилась возможность явно описывать типы обычных переменных.
  • Стали необязательными типизирующие суффиксы в именах переменных, хотя их использование не запрещалось.
  • В более поздних версиях появилась обработка исключений и поддержка элементов ООП.
  • Были введены механизмы поддержки модульности — появилась возможность без «фокусов» (типа динамической загрузки модулей с помощью явных системных вызовов) разделять программу на несколько файлов исходного кода.
  • Появились средства для работы с цветной графикой и звуковой картой.
  • Visual Basic, ориентированный на разработку Windows-приложений с графическим интерфейсом пользователя, был выполнен интегрированным с графическим дизайнером интерфейса, что позволило быстро писать простые программы под Windows.
  • Появились кроссплатформенные реализации, например, FreeBASIC и PureBasic.

Практически все недостатки, присущие ранним версиям языка, были исправлены, и программирование на современных диалектах Бейсика мало отличается от использования других языков и сред (например, таких, как Delphi). Оборотной стороной процесса модификации Basic является то, что язык стал гораздо объёмнее и сложнее, его освоение требует больше времени и усилий.

Фрагмент типичной программы на FreeBASIC:

# Lang "fb" Dim As String n,s,t,n2,t2 Cls : Print "Добро пожаловать!" 'Заголовок в первой строке Do 'Цикл, выводящий линию под заголовком, на всю ширину экрана For i As Integer=1 To LoWord(Width) Print "="; Next i 'Ввод символьных данных от пользователя Input "Имя: ",n Input "Фамилия: ",s Input "Отчество: ",t 'Вырезаем копию первых символов из имени и отчества n2=Left(n,1) t2=Left(t,1) 'Выводим результат Print "Ваше имя кратко: "; s; " "; n2; ". "; t2; "." Print "Повторить программу? (y/n) " Loop While LCase(Input(1))="y" End 0

Несмотря на популярность, в 2001 году Microsoft отказалась от дальнейшей поддержки Visual Basic в пользу принципиально нового языка Visual Basic .NET — в этой реализации язык был снова кардинально пересмотрен, и в текущем состоянии он практически совпадает по набору возможностей c языком C#, отличаются только детали синтаксиса и ключевые слова. Таким образом, Basic перерос из средства для создания программ любителям-непрофессионалам до полноценного средства создания программ.

Помимо написания полноценных программ, Бейсик широко применяется как основа для различных скриптовых языков (например, макросы в пакете Microsoft Office пишутся на диалекте VBA).

ru-wiki.org

Vba: основы синтаксиса

* * *

Для полного описания возможностей и составляющих языка Visual Basic for Applications потребовалось бы несколько толстых книг. Поэтому в этом учебнике вы не найдете подробных описаний каждой команды Visual Basic for Applications, рассказа об их формате и требуемых параметрах. Не найдете по очень простой причине – вся эта информация приведена в Справочной системе Редактора VBA, да и встроенные в него средства автоматической подсказки, о которых вы могли прочесть выше, тоже не дадут ошибиться. Если необходимо узнать, какой набор команд позволяет программно реализовать ту или иную встроенную возможность, например, Microsoft Word, то можно воспользоваться средством записи макросов, выполнив необходимые действия во время его работы, а потом почитать в Справочной системе о каждой записанной команде, открыв получившийся макрос в Редакторе VBA.

Однако в Visual Basic for Applications есть некоторые вещи, о которых в Cправочной системе упоминается не на первом плане, и человеку, незнакомому с программированием, трудно узнать о них. Поэтому в этой главе будут приведены описания некоторых команд, которые нельзя записать средством записи макросов, а также рассказано о неочевидных возможностях Visual Basic for Applications.

Возможно, те, кто ранее занимался программированием, сочтут многое из изложенного очевидным. В этом случае им можно пропустить данную часть.

* * *

Примечание

Очень полезно при разработке программ на Visual Basic for Applications смотреть примеры использования команд, приводимые в справке - в разделах "Example" многих справочных окон (рис. 4.1). Стоит даже копировать оттуда фрагменты кода и модифицировать их под свои нужды.

04_01.Bmp

Рис. 4.1. Фрагмент кода в справке

Если вам никак не удается создать работающий фрагмент кода программы - посмотрите в справке в разделе примеров, не встретится ли вам там то, что вы так долго пытались создать. Все фрагменты кода в справке можно свободно копировать в свои программы. Во всяком случае, в справке все команды написаны грамотно и правильно.

* * *

1. События, методы, свойства.

Когда-то давным-давно программы, написанные и работавшие тогда еще под MS-DOS, получали от пользователя данные, обрабатывали их и выдавали затем результат. Почти любая программа предусматривала в своей работе период ввода данных, период обработки, период выдачи результата. Подобные действия были принципом работы Dos-овских программ. И программирование их называлось структурным, - надо было строго и последовательно разрабатывать алгоритм, реализовывать заданный порядок действий программы, в который в процессе работы почти не мог вмешаться пользователь, разве только принудительно остановив программу.

С появлением операционной системы Windows стал широко известным другой принцип программирования и создания алгоритмических языков - принцип объектно-ориентированного языка.

Это значит, что основная направленность разработчика сместилась с действия на объект, - на описание на языке программирования реакций этого объекта на действия пользователя, его свойств и их изменений. И Visual Basic for Applications является типичным представителем объектно-ориентированных языков, как по своему синтаксису, так и по архитектуре программ.

Основными понятиями объектно-ориентированного языка являются объект, свойство, метод, событие.

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

Почти каждый объект внутри себя имеет подобъекты, которые, в свою очередь, являются полноценными объектами и могут иметь свои подобъекты. Например, у объекта "Документ" есть подобъект "Десятое предложение", у которого есть подобъект "Второе слово", у которого есть подобъект "Третья буква". С помощью объектно-ориентированного языка Visual Basic for Applications можно обратиться к любому объекту Microsoft Office, если знать его иерархию - то есть перечень всех тех объектов, чьим подобъектом он является, и произвести с этим объектом какое-либо действие или, наоборот, узнать какие-либо его характеристики.

Свойство - это любая характеристика объекта. К примеру, у объекта - первой буквы документа есть свойства: выделение жирным, выделение цветом, подчеркивание, выделение курсивом, регистр и много еще других. У объекта - документа есть свойства: наличие автоматической расстановки переносов, наличие автоматической проверки грамматики и др. Большинство свойств объектов Visual Basic for Applications можно задавать программно, однако есть свойства Read-Only - не допускающие изменений. Многие свойства объектов Word также задаются через стандартные диалоговые окна Word - например, "Файл - Параметры страницы" или "Сервис - Параметры", однако их всегда можно задать и программно, а соответствующие диалоговые окна использовать при записи макроса для того, чтобы посмотреть синтаксис команды задания того или иного свойства.

Метод - это какое-либо действие над объектом. Например, печать текста или поиск текста в документе. У многих методов есть параметры метода, позволяющие задать параметры действия. Вот пример:

With Selection.Find

.Text = "Этот текст надо заменить"

.Replacement.Text = "Заменить на этот текст"

.Forward = True

.Wrap = wdFindContinue

.Format = False

.MatchCase = False

.MatchWholeWord = False

.MatchWildcards = False

.MatchSoundsLike = False

.MatchAllWordForms = False

End With

Selection.Find.Execute Replace:=wdReplaceAll

В данном примере вначале объекту Visual Basic for Applications "Find" (т.е. "процессу поиска"), являющемуся подобъектом объекта "Selection" (т.е. выделенный фрагмент текста или, если такового нет, точка ввода текста), задаются необходимые свойства ".Text" (текст для замены), ".Forward" (направление поиска), ".Format" (необходимость учитывания формата текста) и другие. Затем выполняется метод ".Execute" (т.е. здесь - собственно "выполнить поиск") для объекта "Selection.Find" с параметром "Replace:=wdReplaceAll"(т.е. "Заменить все").

Команда "With … End With" позволяет не писать для каждого свойства или подобъекта полное название соответствующего объекта, что дает возможность экономить место и делать программу лучше и быстрее работающей.

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

studfiles.net