- •Основы
- •Элементарные типы данных
- •Некоторым аналогом (по виду, но не по смыслу) объявления переменных внутри процедуры или
- •Пример
- •Имена переменных
- •Команды создания локальных
- •Используемые в Caché простые типы данных
- •Конкатенация строк
- •Числа
- •Булевы величины
- •Даты
- •Оператор косвенности
- •"Визитная карточка" оператора косвенности – символ @.
- •Косвенное имя
- •В следующем примере значение B полагается равным шести:
- •Косвенный аргумент
- •В следующем примере вторая команда set иллюстрирует косвенное имя (@a – только часть
- •Косвенный индекс
- •Пример
- •Списки и массивы
- •Списки
- •Библиотечный класс Caché %AbstractList,
- •Существуют и другие методы, с которыми можно ознакомиться в справочнике классов Caché. Заметим,
- •Массивы
- •Библиотечный класс Caché %AbstractArray,
- •Пример обработки массива:
- •Обработка ошибок
- •Рассмотрим следующую ситуацию. На html-
- •РЕШЕНИЕ ПРОБЛЕМЫ
- •После локализации мы заполняем ее
- •Многомерные массивы и глобалы
- •Глобалы позволяют хранить произвольную информацию, выстроенную в иерархию любой сложности.
Списки и массивы |
Списки и массивы очень часто |
требуются в приложениях для |
хранения различного рода данных, |
поэтому рекомендуется свободно |
владеть методами работы с ними – |
созданием, заполнением данными, |
навигацией, извлечением данных. |
Списки |
Коллекция типа список (list) – это |
упорядоченный набор элементов |
данных, каждый из которых |
идентифицируется своим порядковым |
номером вхождения. |
Нумерация элементов списка |
начинается с единицы. |
Библиотечный класс Caché %AbstractList, |
являющийся базовым для классов |
%ListOfDataTypes и %ListOfObjects, |
предоставляет для обработки списков |
следующие методы: |
Clear() |
Count() |
Find(element, key) |
GetNext(keyByRef) |
GetPrevious(keyByRef) |
Insert(element) |
InsertAt(element, key) |
RemoveAt(key) |
SetAt(element, key) |
Существуют и другие методы, с которыми можно ознакомиться в справочнике классов Caché. Заметим, что у класса %ListOfObjects методы сохраняют ту же семантику обработки списков, но их заголовки учитывают, что "рабочим материалом" методов являются OID объектов и объектные ссылки.
Пример программного кода обработки списка:
Set list=##class(%ListOfDataTypes).%New()
//создание нового списка //заполнение списка элементами
do list.Insert("One") do list.Insert("Two") do list.Insert("Three") do list.Insert("Four")
//проход по списку с распечаткой содержимого
For i=1:1:list.Count() Write list.GetAt(i)
Массивы |
Коллекция типа массив (array) – это |
неупорядоченный набор элементов, |
каждый из которых представляют |
собой пару "ключ- значение". Каждый |
ключ должен быть уникальным в |
массиве. |
Библиотечный класс Caché %AbstractArray, |
являющийся базовым для классов %ArrayOfDataTypes |
и %ArrayOfObjects, предоставляет для обработки |
массивов следующие методы: |
Clear(). |
Count(). |
Find(element, key). |
GetAt(key). |
GetNext(keyByRef). |
GetPrevious(keyByRef). |
IsDefined(key). |
Next(key) и Previous(key). |
RemoveAt(key). |
SetAt(element, key). |
Пример обработки массива: |
Set arr=##class(%ArrayOfDataTypes). |
%New() //создание нового массива |
//заполнение массива элементами |
do arr.SetAt("высокий", "рост") do |
arr.SetAt("прямой","нос") |
do arr.SetAt ("голубые","глаза") do |
arr.SetAt ("тонкие","губы") |
//проход по массиву с распечаткой |
содержимого |
set key="" |
For set value=arr.GetNext(.key) |
Quit:key="" Write key,";", value,! |
Обработка ошибок
Синтаксические средства, предложенные в Caché Object Script для обработки ошибок, существенно отличаются от своих аналогов в С++ и Java, а если говорить точнее – они совершенно иные.
Разработчики Caché решили полностью отказаться от объектного подхода в этом вопросе.
Для изучения обработки ошибок в Caché Object Script примéним индуктивный подход.
Рассмотрим следующую ситуацию. На html- |
странице, являющейся для программы |
стандартным выводом, необходимо |
динамически сформировать выпадающее меню |
<select>, пункты которого хранятся как |
отдельные строки в некотором файле, имя |
которого хранится в локальной переменной |
myfile. |
Сколько в файле находится строк – заранее |
неизвестно, признаком окончания считывания |
является обнаружение конца файла. Если он |
обнаружен, нужно завершить формирование |
элемента <select>, выведя на html-страницу |
закрывающий тег </select>. |
РЕШЕНИЕ ПРОБЛЕМЫ |
new $ETRAP. |
set $ETRAP="if $FIND($ZERROR, ""ENDOFFILE"")'=0 |
use p set $ECODE="""" |
close myfile write ""</select>"", ! GOTO metka1" |
Write "<select>",! |
while 1 |
{ |
set p=$IO |
use myfile read v1 |
use p write "<option>",v1,"</option>", ! |
} |
metka1 |
//дальнейшее выполнение программы |