Цикл (FOR)
Оператор цикла создает действие, которое перебирает все наборы объектов, для которых выполняется заданное условие, и для каждого такого набора объектов выполняет заданное действие (будем называть его основным). Также существует возможность задать альтернативное действие, которое выполняется, только если не было найдено ни одного набора объектов, удовлетворяющего условию. Само условие задается некоторым свойством. Будем говорить, что условие выполняется, если значение этого свойства не равно NULL
.
По умолчанию наборы объектов перебираются в произвольном не гарантированном порядке, однако, при необходимости, у разработчика есть возможность задать этот порядок явно. Для этого необходимо определить список свойств по возрастанию или убыванию значений которых и будет происходить перебор объектов.
Как и для других операций со множествами, условие должно быть таким, чтобы операция была корректной.
Добавление объекта
В этом операторе также существует возможность для каждого итерируемого набора объектов создавать объект заданного конкретного пользовательского класса. Этот объект затем можно использовать в основном действии в качестве параметра.
Язык
Синтаксис оператора цикла описывается оператором FOR
.
Примеры
name = DATA STRING[100] (Store);
testFor {
LOCAL sum = INTEGER ();
FOR iterate(i, 1, 100) DO {
sum() <- sum() (+) i;
}
FOR in(Sku s) DO {
MESSAGE 'Sku ' + id(s) + ' was selected';
}
FOR Store st IS Store DO { // пробегаем по всем объектам класса Store
FOR in(st, Sku s) DO { // пробегаем по всем Sku, для которых in задано
MESSAGE 'There is Sku ' + id(s) + ' in store ' + name(st);
}
}
}
newSku () {
NEW s = Sku {
id(s) <- 425;
name(s) <- 'New Sku';
}
}
copy (Sku old) {
NEW new = Sku {
id(new) <- id(old);
name(new) <- name(old);
}
}
createDetails (Order o) {
FOR in(Sku s) NEW d = OrderDetail DO {
order(d) <- o;
sku(d) <- s;
}
}