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

How-to: IF/CASE

Пример 1

Условие

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

CLASS Book 'Книга';
name 'Наименование' = DATA ISTRING[50] (Book);

CLASS Category 'Категория' {
novel 'Роман',
thriller 'Триллер',
fiction 'Фантастика'
}

category 'Категория' = DATA Category (Book);
price 'Цена' = DATA NUMERIC[14,2] (Book);

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

Решение

setPriceIf 'Установить цену' (Book b)  {
IF NOT category(b) THEN
MESSAGE 'Не выбрана категория для книги';
ELSE
IF category(b) == Category.novel THEN
price(b) <- 50.0;
ELSE
price(b) <- 100.0;
}

Пример 2

Условие

Аналогично Примеру 1.

Нужно создать действие, которое устанавливает одну из трех цен в зависимости от трех категорий. Во всех остальных случаях цена должна стать равной нулю.

Решение

setPriceCase 'Установить цену' (Book b)  {
CASE
WHEN category(b) == Category.novel THEN
price(b) <- 50.0;
WHEN category(b) == Category.thriller THEN
price(b) <- 100.0;
WHEN category(b) == Category.fiction THEN
price(b) <- 150.0;
ELSE
price(b) <- 0.0;
}