Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Материал / Тема №5. Cache Object Script.pptx
Скачиваний:
4
Добавлен:
18.02.2023
Размер:
125.93 Кб
Скачать

Списки и массивы

Списки и массивы очень часто

требуются в приложениях для

хранения различного рода данных,

поэтому рекомендуется свободно

владеть методами работы с ними –

созданием, заполнением данными,

навигацией, извлечением данных.

Списки

Коллекция типа список (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

//дальнейшее выполнение программы