ГОСТ Р HCO/HL7 27951—2016
- круглые скобки для переопределения приоритетов операторов преобразования и разрешения свойств:
(TJx.property по сравнению с ((T)x).property.
В.1.9.2.2 Выражения с вложенными кванторами
По аналогии с инвариантными выражениями внутри выражения высказываний могут быть указаны вложен
ные кванторы. В действительности квантор общности, записанный с помощью ключевого слова forall. является не
чем иным, как инвариантным выражением. Как показано в следующем примере, квантор общности может
исполь зоваться во вложенном выражении, если этого требует сложность проблемы:
invariant(SET<T> х, у!
where x.nonKull (
х.subset(у;.equal(
lorall(Т element) where
x .
contains(element> (
y .
contains(element);
1>;
i ;
Квантор существования имеет то же значение, что и в общей ложке высказываний. Например, следующее
инвариантное выражение означает. «Значения х и у типа SET (множество) пересекаются в том и только том слу чав.
когда существует элемент е. принадлежащий обоим множествам х и у».
-invariant(SET х, у)
where x.nonNull (
х.intersects(у!.equal(
exists(Т e> {
x. contains(e);
y. contains(e>;
)>;
);
В кванторе существования может использоваться конструкция v.trere, однако нет разницы в том. сделано
ли высказывание в конструкции where или в теле квантора существования. Напротив, в кванторах общности кон
струкция where ослабляет высказывание, поскольку при наличии этой конструкции тело применяется только к тем
значениям, которые удовлетворяют критерию, указанному в конструкции where.
В.1.9.3 Преобразование типов
В настоящей спецификации определены некоторые допустимые преобразования типов данных. Например,
для типов данных ST (строка символов) и ED (инкапсулированные данные) существует пара преобразований. Это
означает, что если ожидается значение типа ED. но получено значение типа ST. то можно преобразовать значение
типа ST в значение типа ED1>.
Определены три вида преобразования типов данных: повышающее приведение (promotion), понижающее
приведение (demotion) и литералы строк символов. Преобразования типов могут быть явными и неявными. Не
явное преобразование типов имеет место, если ожидается значение определенного типа (например, в аргументе
выражения), но в действительности получено значение другого типа. Если тип полученного значения допускает
преобразование в ожидаемый тип, то преобразование должно быть сделано неявным образом.
П р и м е ч а н и е — В спецификации реализуемой технологии должно быть указано, каким образом под
держивается неявное преобразование типов данных. В некоторых техноложях неявное преобразование поддер
живается. в других нет; в любом случав должны быть описаны правила обработки, указывающие, как такие преоб
разования реализуются.
Явное преобразование можно задать в выражении утверждения, указав имя целевого типаданных в скобках
перед преобразуемым значением. Например, ниже показано явное преобразование типа данных в конструкции
where инвариантного выражения:
invariant.(ED х)
where ((ST>x).nonNuli ( __ i;
Преобразование типа имеет более низкий приоритет по сравнению с точкой, используемой для указания
свойства. Так. «(Т)а.Ь» задает преобразование значения свойства b переменной а в жп данных Т. в то время как
11 Это означает, что если некто ожидает значение типа ED. но вместо него получил значение типа ST. то он
может преобразовать значение типа ST в значение типа ED.
293