Перейти к основному содержимому
Версия: 5.x

How-to: EXEC

Пример 1

Условие

Есть категория книг, для которой заданы наименование, числовой код и дата начала продаж.

CLASS Category 'Категория';

name 'Наименование' = DATA ISTRING[50] (Category);
id 'Код' = DATA INTEGER (Category);
saleDate 'Дата начала продаж' = DATA DATE (Category);

Нужно создать действие, которое создаст 3 новых предопределенных категории.

Решение

createCategory 'Создать категорию' (ISTRING[50] name, INTEGER id, DATE saleDate)  {
NEW c = Category {
name(c) <- name;
id(c) <- id;
saleDate(c) <- saleDate;
}
}

create3Categories 'Создать 3 категории' () {
createCategory('Категория 1', 1, 2010_02_14);
createCategory('Категория 2', 2, 2011_03_08);
createCategory('Категория 3', 3, 2014_07_01);
}

Пример 2

Условие

Аналогично Примеру 1, но у каждой категории задан ее "родитель".

parent 'Родитель' = DATA Category (Category); // если значение NULL, то родителя нету

Нужно создать действие, которое проставит глубину категории для каждой из них.

Решение

depth = DATA INTEGER (Category);
fillDepth (Category c, INTEGER depth) {
FOR parent(Category i) == c DO {
depth(i) <- depth;
fillDepth(i, depth + 1);
}
}

run() {
fillDepth(NULL, 0);
}