|
|
| (не показаны 26 промежуточных версий 1 участника) |
| Строка 1: |
Строка 1: |
| − | Наверное нет языка программирования проще, чем VBScript – Visual Basic Scripting Edition. Даже начинающий программист способен освоить его за два-три дня, а человек знакомый с Visual Basic или Visual Basic for Applications (VBA) практически сразу может приступать к работе. Ниже приведены основные сведения по синтаксису языка, дано описание операторов и встроенных функций. К сожалению, обработка ошибок в VBScript реализована на очень примитивном уровне. Разработчики не предусмотрели конструкций для обработки исключительных ситуаций, таких как try-except и try-finally в Delphi. В разделах "!!!" и "!!!" мы рассмотрим способы преодоления этих ограничений. | + | Наверное нет языка программирования проще, чем VBScript – Visual Basic Scripting Edition. Даже начинающий программист способен освоить его за два-три дня, а человек знакомый с Visual_Basic Visual Basic или Visual_Basic_for_Applications Visual Basic for Applications (VBA) практически сразу может приступать к работе. Ниже приведены основные сведения по синтаксису языка, дано описание операторов и встроенных функций. К сожалению, обработка ошибок в VBScript реализована на очень примитивном уровне. Разработчики не предусмотрели конструкций для обработки исключительных ситуаций, таких как try-except и try-finally в Delphi. В разделах [[VBScript. Обработка ошибок|Обработка ошибок]] и [[VBScript. Использование TCreator|Использование TCreator]] мы рассмотрим способы преодоления этих ограничений. |
| | | | |
| − | VBScript является интерпретируемым языком. За выполнение программы отвечает Windows Script Host, который поставляется в составе операционной системы начиная с версии Windows 98. На момент написания данной книги, последняя версия VBScript имела номер 5.7 и поставлялась в составе Windows Vista. Обновления для предыдущих версий операционной системы можно скачать с сайта компании Microsoft. | + | VBScript является интерпретируемым языком. За выполнение программы отвечает Windows Script Host, который поставляется в составе операционной системы начиная с версии Windows 98. На момент написания данной книги, последняя версия VBScript имела номер 5.8 и поставлялась в составе Windows 7. Обновления для предыдущих версий операционной системы можно скачать с сайта компании [http://msdn.microsoft.com/en-us/library/t0aew7h6%28VS.85%29.aspx Microsoft]. |
| | | | |
| − | === Подготовительные мероприятия === | + | == Содержание == |
| | | | |
| − | Учебные примеры мы будем выполнять в Гедымине, для чего создадим глобальный макрос согласно приведенным ниже инструкциям:
| + | * [[VBScript. Подготовительные мероприятия|Подготовительные мероприятия]] |
| | + | * [[VBScript. Основы VBScript|Основы VBScript]] |
| | + | * [[VBScript. Встроенные функции|Встроенные функции]] |
| | + | * [[VBScript. Обработка ошибок|Обработка ошибок]] |
| | + | * [[VBScript. Использование TCreator|Использование TCreator]] |
| | | | |
| − | # Запустим Гедымин;
| + | === См. также === |
| − | # Подключимся к демонстрационной базе данных под учетной записью Administrator;
| + | |
| − | # Откроем окно Редактора скрипт-объектов;
| + | |
| − | # Создадим новый глобальный макрос под названием "Test VBScript";
| + | |
| − | # В поле Наименование функции введем TestVBScript.
| + | |
| | | | |
| − | http://gsbelarus.com/gs/images/gs/2009/book/VBScript1.png | + | * [http://ru.wikipedia.org/wiki/Visual_Basic_Script Visual Basic Scripting Edition] |
| − | | + | * [http://ru.wikipedia.org/wiki/Visual_Basic Visual Basic] |
| − | == Основы VBScript ==
| + | * [http://ru.wikipedia.org/wiki/Visual_Basic_for_Applications Visual Basic for Applications (VBA)] |
| − | | + | |
| − | === Типы данных ===
| + | |
| − | | + | |
| − | В языке VBScript используется единственный тип данных – Variant (Вариант), который позволяет хранить в переменной число, строку, дату, булевское значение, ссылку на объект и другую информацию. Определить тип содержимого переменной можно с помощью набора функций: [[VBScript. Функция VarType|VarType]], TypeName, IsArray, IsDate, IsEmpty, IsNull, IsNumeric, IsObject, которые будут рассмотрены ниже. Тип содержащейся информации еще называется подтипом варианта. Полный список подтипов приведен в следующей таблице:
| + | |
| − | | + | |
| − | {| class="wikitable" border="1"
| + | |
| − | ! Подтип !! Описание
| + | |
| − | |-
| + | |
| − | | Empty || Переменной не присвоено значение. При использовании неинициализированной переменной в числовых выражениях, будет подставляться 0, а в строковых – пустая строка.
| + | |
| − | |-
| + | |
| − | | Null || Переменная не содержит данных.
| + | |
| − | |-
| + | |
| − | | Boolean || Булевская переменная может принимать значения True, или False.
| + | |
| − | |-
| + | |
| − | | Byte || Целое число в диапазоне от 0 до 255.
| + | |
| − | |-
| + | |
| − | | Integer || Целое число в диапазоне от -32 768 до 32 767.
| + | |
| − | |-
| + | |
| − | | Currency || Число с фиксированной точкой в диапазоне от -922 337 203 685 477.5808 до 922 337 203 685 477.5807.
| + | |
| − | |-
| + | |
| − | | Long || Целое число в диапазоне от -2 147 483 648 до 2 147 483 647.
| + | |
| − | |-
| + | |
| − | | Single || Число с плавающей точкой одинарной точности. Для отрицательных значений допустимый диапазон
| + | |
| − | от -3.402823E38 до -1.401298E-45. Для положительных – от 1.401298E-45 до 3.402823E38.
| + | |
| − | |-
| + | |
| − | | Double || Число с плавающей точкой двойной точности. Для отрицательных значений допустимый диапазон от
| + | |
| − | -79769313486232E308 до -4.94065645841247E-324. Для положительных -- от 4.94065645841247E-324 до 1.79769313486232E308.
| + | |
| − | |-
| + | |
| − | | Date (Time) || Содержит число, представляющее дату в диапазоне от 1-го января 100 года, до 31 декабря 9999 года.
| + | |
| − | |-
| + | |
| − | | String || Последовательность символов. Максимальная длина в районе 2-х миллиардов знаков.
| + | |
| − | |-
| + | |
| − | | Object || Объект.
| + | |
| − | |-
| + | |
| − | | Error || Номер ошибки.
| + | |
| − | |}
| + | |
| − | | + | |
| − | В зависимости от выражения, в котором участвует переменная, ее содержимое будет автоматически приведено к нужному типу. Рассмотрим такой пример:
| + | |
| − | | + | |
| − | Option Explicit
| + | |
| − | Sub TestVBScript
| + | |
| − |
| + | |
| − | Dim A, B
| + | |
| − | A = 5
| + | |
| − | B = "12"
| + | |
| − | Application.MessageBox A + B, "", vbOkOnly
| + | |
| − |
| + | |
| − | End Sub
| + | |
| − | | + | |
| − | Так как в выражении участвует числовая переменная '''A''', интерпретатор преобразует значение переменной '''B''' из строки '''"12"''' в число и просуммирует их:
| + | |
| − | | + | |
| − | http://gsbelarus.com/gs/images/gs/2009/book/VBScript.DataTypes.1.png | + | |
| − | | + | |
| − | Изменим макрос так, чтобы переменная '''А''' тоже содержала строку:
| + | |
| − | | + | |
| − | Option Explicit
| + | |
| − | Sub TestVBScript
| + | |
| − |
| + | |
| − | Dim A, B
| + | |
| − | A = "5"
| + | |
| − | B = "12"
| + | |
| − | Application.MessageBox A + B, "", vbOkOnly
| + | |
| − |
| + | |
| − | End Sub
| + | |
| − | | + | |
| − | Запустим его на выполнение. Теперь на экране появится результат слияния (конкатенции) двух строк, а не сумма их числовых представлений:
| + | |
| − | | + | |
| − | http://gsbelarus.com/gs/images/gs/2009/book/VBScript.DataTypes.2.png | + | |
| − | | + | |
| − | Во избежании путаницы с автоматическим приведением типов, рекомендуется использовать функции конверсии: CBool, CByte, CCur, CDate, CDbl, CInt, CLng, CSng, CStr.
| + | |
| − |
| + | |
| − | Если результатом выражения должно быть именно слияние строк, а не сумма их числовых представлений, то следует использовать оператор & вместо +.
| + | |
| − | | + | |
| − | === Переменные ===
| + | |
| − | | + | |
| − | Переменная – это удобное символьное обозначение области памяти, где приложение хранит некоторые данные. В процессе выполнения приложения значение переменной может изменяться. Перед использованием переменную следует объявить с помощью оператора Dim.
| + | |
| − | | + | |
| − | Dim A
| + | |
| − | | + | |
| − | С помощью одного оператора можно объявить сразу несколько переменных, если перечислить их имена через запятую:
| + | |
| − | | + | |
| − | Dim Left, Right, Top, Bottom
| + | |
| − | | + | |
| − | При объявлении нет необходимости в указании типа данных, так как все переменные имеют тип Variant.
| + | |
| − | | + | |
| − | ''Если в первой строке текста скрипта не указано Option Explicit, то использовать переменные можно без объявления. Но, такой путь может привести к трудно выявимым ошибкам. Достаточно один раз ошибиться в написании имени переменной в тексте программы, чтобы получить непредсказуемый результат. Мы рекомендуем всегда указывать Option Explicit и объявлять переменные.''
| + | |
| − | | + | |
| − | Имя переменной должно соответствовать следующим требованиям:
| + | |
| − | | + | |
| − | # Начинаться с символа латинского алфавита;
| + | |
| − | # Состоять только из символов латинского алфавита или из символов латинского алфавита и цифр;
| + | |
| − | # Не превышать 255 символов в длину;
| + | |
| − | # Быть уникальным в пределах своей области видимости.
| + | |
| − | | + | |
| − | === Область видимости и время жизни ===
| + | |
| − | | + | |
| − | Область видимости переменной определяется тем, где она была объявлена. Если внутри тела процедуры<ref>Очевидно, что сказанное в раной мере применимо и к функциям.</ref>, то такая переменная называется локальной и доступна только в пределах этой процедуры. Если переменная объявлена в тексте скрипта, то она будет видима для всех процедур или функций определенных в этом скрипте. Локальные переменные могут иметь одинакове имена, если объявлены в разных процедурах.
| + | |
| − | | + | |
| − | ''В дереве Проводника окна Редактора скрипт-объектов присутствует специальный раздел – Константы и переменные – для объявления глобальных переменных, видимых для всех скрипт-функций проекта.''
| + | |
| − | | + | |
| − | Интерпретатор выделяет память для локальных переменных в момент их объявления и высвобождает по выходу из процедуры. Глобальные переменные существуют с момента их объявления и пока скрипт не закончит свое выполнение. Применительно к Гедымину это означает, что глобальные переменные существуют на протяжении всего времени выполнения программы.
| + | |
| − | | + | |
| − | === Присваивание значения переменной ===
| + | |
| − | | + | |
| − | Значение объявленной переменной присваивается с помощью оператора =. Имя переменной указывается слева от оператора, новое значение – справа. Например:
| + | |
| − | | + | |
| − | A = 200
| + | |
| − | B = "Наименование"
| + | |
| − | | + | |
| − | === Скалярные переменные и массивы ===
| + | |
| − | | + | |
| − | Переменная содержащая единственное значение называется скалярной. Иногда, возникает необходимость хранить несколько значений в одной переменной. В этом случае следует объявить массив. Синтаксис объявления идентичен объявлению скалярной переменной за тем исключением, что после имени в круглых скобках мы задаем размерность массива. Следующее объявление создаст массив из 12 элементов:
| + | |
| − | | + | |
| − | Dim Monthes(11)
| + | |
| − | | + | |
| − | В языке VBScript левая граница индекса массива всегда 0. Таким образом размер массива вычисляется, как число указанное в скобках плюс один. При присваивании значения элементу массива следует указать его индекс в круглых скобках:
| + | |
| − | | + | |
| − | Monthes(0) = "Январь"
| + | |
| − | Monthes(1) = "Февраль"
| + | |
| − | Monthes(2) = "Март"
| + | |
| − | ...
| + | |
| − | Monthes(10) = "Ноябрь"
| + | |
| − | Monthes(11) = "Декабрь"
| + | |
| − | | + | |
| − | Аналогично, при обращении к значению элемента мы используем его индекс:
| + | |
| − | | + | |
| − | MonthName = Monthes(5)
| + | |
| − | | + | |
| − | Массив не обязательно должен быть одномерным. VBScript позволяет нам задать до 60 размерностей при объявлении массива. Например, следующий оператор создаст двумерный массив из 12 строк и двух колонок <ref>При объявлении двумерного массива первое число всегда задает количество строк, а второе – колонок.</ref>:
| + | |
| − | | + | |
| − | Dim MonthDays(11, 1)
| + | |
| − | | + | |
| − | При обращении к элементам многомерного массива следует указывать все индексы:
| + | |
| − | | + | |
| − | MonthDays(0, 0) = "Январь"
| + | |
| − | MonthDays(0, 1) = 31
| + | |
| − | MonthDays(1, 0) = "Февраль"
| + | |
| − | MonthDays(1, 1) = 28
| + | |
| − | ...
| + | |
| − | | + | |
| − | Выше мы объявляли массивы, размер которых не меняется в процессе работы программы. Если заранее не известно сколько элементов понадобится, то можно объявить динамический массив:
| + | |
| − | | + | |
| − | Dim A()
| + | |
| − | | + | |
| − | Перед использованием следует установить размер динамического массива с помощью оператора ReDim:
| + | |
| − | | + | |
| − | ReDim A(25)
| + | |
| − | | + | |
| − | В процессе выполнения можно вызывать оператор ReDim многократно, каждый раз изменяя размер массива. Опция Preserve сохраняет значения элементов массива при изменении размера. Например, следующий код увеличит объявленный выше массив на пять элементов, оставив существующие нетронутыми:
| + | |
| − | | + | |
| − | ReDim Preserve A(30)
| + | |
| − | | + | |
| − | Помните, что при уменьшении размера массива, значения удаленных элементов будут безвозвратно утеряны.
| + | |
| − | С помощью оператора Erase можно очистить элементы фиксированного массива или освободить память, занимаемую динамическим массивом.
| + | |
| − | | + | |
| − | Dim A
| + | |
| − | ReDim A(25)
| + | |
| − | ...
| + | |
| − | Erase A
| + | |
| − | | + | |
| − | === Константы ===
| + | |
| − | | + | |
| − | Правилом хорошего тона является объявление констант для многократно используемых в тексте программы значений. Грамотно присвоенное имя константы улучшает читабельность, а само использование -- упрощает процесс внесения изменений в код. В отличие от переменных, значение константы нельзя изменить в процессе выполнения программы. Создание константы происходит с помощью оператора Const:
| + | |
| − | | + | |
| − | Const CountryName = "Belarus"
| + | |
| − | Const CountryCode = 375
| + | |
| − | | + | |
| − | Несколько констант могут быть объявлены в рамках одного оператора, через запятую. Как и переменная, константа обладает своей областью видимости в зависимости от того, где (в процедуре или за ее пределами) и как (Public или Private) она была объявлена. Константы, созданные оператором Const без указания Public или Private являются общедоступными по-умолчанию.
| + | |
| − | | + | |
| − | ''В дереве Проводника окна Редактора скрипт-объектов присутствует специальный раздел – Константы и переменные – для объявления глобальных констант, видимых для всех скрипт-функций проекта.''
| + | |
| − | | + | |
| − | Значения строковых констант заключаются в двойные кавычки. Значения типа Дата следует обрамлять символами решетки (#) и использовать американский формат: месяц/день/год. Например:
| + | |
| − | | + | |
| − | Const Public IndependenceDay = #03/25/1918#
| + | |
| − | | + | |
| − | Во избежание путаницы между константами и переменными рекомендуется использовать единый префикс для всех констант, например "con", или набирать имя константы в верхнем регистре.
| + | |
| − | | + | |
| − | Для облегчения труда программиста VBScript содержит набор [[VBScript. Предопределенные константы|предопределенных констант]].
| + | |
| − | | + | |
| − | === Операторы ===
| + | |
| − | | + | |
| − | Операторы VBScript подразделяются на пять категорий: арифметические, сравнения, слияния, логические и присваивания.
| + | |
| − | | + | |
| − | ==== Арифметические операторы ====
| + | |
| − | | + | |
| − | {| class="wikitable" border="1"
| + | |
| − | ! Оператор !! Пример использования !! Описание
| + | |
| − | |-
| + | |
| − | | ^ || number ^ exponent || Возводит number в степень exponent. Number может быть меньше нуля только в случае целочисленной степени. Если один из операндов Null, все выражение принимает значение Null. Если несколько возведений в степень выполняются подряд, результат вычисляется слева направо.
| + | |
| − | |-
| + | |
| − | | * || number1 * number2 || Произведение двух чисел. Если операнд имеет значение Empty, то он принимается равным нулю. Если хотя бы один из операндов Null, все выражение принимает значение Null.
| + | |
| − | |-
| + | |
| − | | / || number1 / number2 || Вещественное деление двух чисел. Для операндов действуют правила аналогично оператору умножения.
| + | |
| − | |-
| + | |
| − | | \ || number1 \ number2 || Целочисленное деление. Перед вычислением оба операнда приводятся к типу Byte, Integer или Long. В остальном действуют правила как для оператора деления.
| + | |
| − | |-
| + | |
| − | | Mod || number1 Mod number2 || Остаток от целочисленного деления. Приведение операндов к целому, а также правила обращения с Empty и Null, как у целочисленного деления.
| + | |
| − | |-
| + | |
| − | | + || expression1 + expression2 || Если оба операнда числа, результатом является их арифметическая сумма. Если оба операнда строки – слияние (конкатенция) двух строк. Если один операнд число, а другой строка, то строковый операнд будет преобразован в число и прибавлен к числовому. Если хотя бы один из операндов Null, все выражение принимает значение Null. Если оба операнда Empty, результат имеет целочисленное значение 0. Если только один оператор Empty, в качестве результата возвращается значение второго операнда.
| + | |
| − | |-
| + | |
| − | | - || number1 – number2 или - number || В первом случае возвращает разность двух чисел. Во втором – инвертирует знак числа. Правила для операндов со значениями Null и Empty, как для оператора умножения.
| + | |
| − | |}
| + | |
| − | | + | |
| − | == Примечания ==
| + | |
| − | <references/>
| + | |
| | | | |
| | [[Category:VBScript]] | | [[Category:VBScript]] |
| | [[Category:Книга]] | | [[Category:Книга]] |
Наверное нет языка программирования проще, чем VBScript – Visual Basic Scripting Edition. Даже начинающий программист способен освоить его за два-три дня, а человек знакомый с Visual_Basic Visual Basic или Visual_Basic_for_Applications Visual Basic for Applications (VBA) практически сразу может приступать к работе. Ниже приведены основные сведения по синтаксису языка, дано описание операторов и встроенных функций. К сожалению, обработка ошибок в VBScript реализована на очень примитивном уровне. Разработчики не предусмотрели конструкций для обработки исключительных ситуаций, таких как try-except и try-finally в Delphi. В разделах Обработка ошибок и Использование TCreator мы рассмотрим способы преодоления этих ограничений.
VBScript является интерпретируемым языком. За выполнение программы отвечает Windows Script Host, который поставляется в составе операционной системы начиная с версии Windows 98. На момент написания данной книги, последняя версия VBScript имела номер 5.8 и поставлялась в составе Windows 7. Обновления для предыдущих версий операционной системы можно скачать с сайта компании Microsoft.