Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекція 3. Основні елементи мови Caché Object Script-рус.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
55.42 Кб
Скачать

Лекция 3. Основные элементы языка Caché Object Script

1. Переменные

2. Операторы и выражения

В СУБД Caché реализован собственный язык программирования Caché Object Script (COS). COS — это расширенная и переработанная версия языка программирования M(ANSI MUMPS).

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

Кроме этого, в Caché вводится понятие Caché-программы. Caché-программа не является составной частью классов и предназначена для написания прикладного программного обеспечения для текстовых терминальных систем.

Особенности языка Object Script:

• Язык не имеет зарезервированных слов: вы свободны в выборе имен идентификаторов, также как и имен переменных.

Например: set set=12, где первый set – это команда, второй – это имя переменной.

• Не является языком строгой типизации. Используемые переменные не требуют предварительного объявления.

• Имеется большой набор встроенных функций, которые отличаются наличием знака $ перед именем функции.

Например: $Piece, $Select и т.д.

• Существует довольно много встроенных команд языка.

Например: write, read и т.д.

Read <формат>, <строка>, <переменная> - прием и сохранение данных, введенных пользователем с текущего устройства I / O.

Write - вывода данных на терминал или указанное устройство I / O. Может использоваться с аргументом и без.

• Поддержка работы с классами и объектами.

• Поддержка работы с многомерными массивами.

• Широкий набор функций для прямого управления потоками внутри приложений.

• Набор команд ввода/вывода.

• Поддержка встроенного SQL.

1. Переменные

Общая длина имени локальной или глобальной переменной не ограничена, правда, определяющими являются только первые 31 символ. Первым символом должна быть строчная или прописная буква, либо символ %. Все остальные символы могут представлять собой смесь букв или цифр из 7-битного набора символов ASCII. Знаки препинания, исключая точку, которая может быть использована в любой позиции имени глобальной переменной, кроме первой и последней, запрещены. Имена переменных чувствительны к регистру. COS поддерживает два класса переменных: локальные и глобальные переменные. Оба вида переменных могут существовать в виде скалярных и многомерных структур.

Локальные переменные существуют только в памяти во время процесса, в котором они были объявлены, и доступны только в пределах данного процесса.

Глобальные переменные доступны всем активным процессам и порождаются двумя способами: прямым созданием в приложении и автоматическим для элементов, хранящихся в БД. Такие переменные называются Глобал. Имена Глобал начинаются с символа «^» - циркумфлекс.

Основное назначение Глобал - предоставление доступа к сохраненным объектам прбд.

В Cache ObjectScript отсутствует декларирование переменных: единственный тип данных – это строка символов переменной длины, то есть все переменные — это переменные типа string. Тем не менее, внутренними средствами системы результат арифметической или логической операции интерпретируется как число или, соответственно, как логическое значение.

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

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

Таблица 1. Системные переменные.

Системная переменная

Краткое описание

$HALT

Если $HALT содержит имя программы, эта программа будет вызвана при выполнении команды Halt.

$H[orolog]

$Horolog содержит дату и время в форме 2 счетчиков, отделенных друг от друга запятой. Первый счетчик показывает количество дней, начиная с пятницы, 31 декабря 1840 года (нулевой день), второй счетчик – количество секунд, начиная с полуночи. Обратите внимание также на специальную переменную $ZTimeStamp, аналогичную переменной $Horolog, но показывающую дополнительно еще и миллисекунды.

>Write $Horolog // выводит «57713,36814»

>Write $Piece($Horolog, ", ", 2) // выводит «36815»

>Write +$Horolog // выводит «57713»

$I[O]

$IO содержит имя используемого в текущий момент устройства ввода-вывода.

>Use "TTA3:" Write $I0 // выводит «TTA3:»

$J[ob]

$Job содержит положительное целое число, однозначно идентифицирующее каждый текущий процесс в данной системе. $Job не изменяется, пока данный процесс является активным.

>Write $Job // выводит «1024»

>Set ^temp($Job) = "String"

$K[ey]

$Кеу содержит символ или последовательность символов, которым завершилась последняя команда Read. Сравните ее с эквивалентной с функциональной точки зрения переменной $ZB.

>Write $Key // выводит «<Return>»

$P[rincipal]

Подобно $IO, $Principal содержит имя устройства, с которого был запущен текущий процесс.

>Write $Principal // выводит «/dev/tty05»

$Q[uit]

Вызванная в пользовательской функции переменная $Quit всегда имеет значение 1, в противном случае (в подпрограмме) – значение 0.

>Write $Quit «1»

$S[torage]

Содержит количество байт, предоставленных для хранения локальных переменных в текущем процессе. Смотри также $ZStorage.

>Write $Storage “15845”

$T[est]

$Test содержит значение только что вычисленного тестового условия. $Test устанавливается при использовании If с аргументом, а также в командах Open, Lock, Read и Job с таймаутом. Безаргументные команды If и Else (также как и постусловие) не меняют значения $Test. $Test при вызове пользовательских функций и специальных переменных, а также программного блока неявно обрамляется безаргументной командой Do и по окончании вызова вновь устанавливается в старое значение.

>If a = 5 Write $Test // выводит «1» (если а = 5)

>Open dev::10 Write $Test // выводит «1» (если Open проходит в течение 10 сек.)

$X отражает горизонтальную позицию курсора по отношению к началу строки на устройстве вывода. Каждый выводимый печатный символ увеличивает значение системной переменной $X на 1. Максимальное значение составляет 255 и далее сбрасывается в ноль.

>If $X > 79 Write !

$Y

$Y отражает вертикальную позицию курсора по отношению к устройству вывода. Каждый символ перевода строки (ASCII 10) увеличивает, значение $Y на 1 до тех пор, пока, достигнув максимального значения (255), оно снова не сбросится в ноль.

>If $Y > 59 Write #

$ZA

Статус последней команды Read на текущем устройстве.

>Write $ZA # 21

$ZB

Функционально эквивалентна $Кеу, содержит символ или последовательность символов, считанных последнюю команду Read.

>Write $ZB // выводит «<Return>»

$ZC[hild]

Если текущий процесс Cache, используя команду Job, запустил новый процесс, $ZChild содержит его идентификатор. Значение равно 0, если новый процесс не стартовал.

>Write $ZChild // выводит «37»

$ZEOF

$ZEOF является признаком достижения конца файла после выполнения операции чтения из него. Если был достигнут конец файла, $ZEOF устанавливается в 1.

>If $ZEOF Close file

$ZH[orolog]

$ZHorolog содержит время в секундах и миллисекундах со времени старта Cache.

>Write $ZHorolog // выводит «2365.63»

$ZI[O]

$ZIO содержит информацию о типе терминального устройства. Если речь идет, например, о связи через Telnet, то $ZIO содержит IP – адрес клиента в форме nnn.nnn.nnn.nnn/port, или, если работает распознавание имен, Name/port где Name — имя клиентской машины.

>Write $ZIO // выводит «192.9.200.79/1260»

$ZJ[ob]

$ZJob содержит число, которое содержит специальную информацию о текущем процессе, представленную в виде битовой строки.

5

$ZM[ode]

$ZMode содержит параметры устройства, заданные в последней команде Open или Use.

>Write $ZMode «RY\ISM\»

$ZN[ame]

$ZName содержит имя загруженной в текущий момент программы.

>Write $ZName // выводит «Rec112»

$ZNS[pace]

$ZNSpace содержит имя текущей области.

>Write $ZNSpace // выводит «USER»

$ZP[arent]

$ZParent содержит идентификатор процесса, который создал текущий процесс с помощью команды Job. Если он создавался не с использованием команды Job, значение равно 0.

>Write $ZParent // выводит «0»

$ZPI

Содержит математическую константу Pi = 3.141592653589...

>Write $ZPI «3.141592653589793238»

$ZR[eference]

$ZReference возвращает полную ссылку на только что использованную глобальную переменную.

>Set ^G(1) = "Hello"

>Write $ZReference // выводит «^G(1)»

$ZS[torage]

$ZStorage содержит (или устанавливает) размер рабочей памяти (в KB), который имеется или должен иметься в распоряжении процесса Cache.

>Write $ZStorage // выводит «24»

$ZtimeStamp $ZTS

$ZtimeStamp, также как и $Horolog, содержит счетчик дней и секунд, последний с сотыми долями секунд.

>Write SZTS // выводит «57500,11608.52»

$ZTimeZone $ZTZ

$ZTimeZone содержит число минут смещения времени для данного часового пояса относительно Гринвича. Если произвести изменение значения $ZTimeZone, то значение $Horolog тоже изменится и будет соответствовать данному часовому поясу.

>Write $ZTZ // выводит «300»

$ZV[ersion]

$ZVersion содержит номер версии используемой в текущий момент времени системы Cache.

>Write $ZVersion // выводит «Cache for Windows NT (Intel) 5.0»