Нестрогие булевы операторы

Выражения с операторами

Текущий объект

Вызовы функций

 

Вызовы функций имеют такой же синтаксис, как и вызовы процедур. Они могут быть квалифицированные и неквалифицированные: в первом случае используется нотация с многоточием. При соответствующих объявлениях класса и функций, они, например, таковы:

 

b.f

b.g(x, y, ...)

b.h(u, v).i.j(x, y, ...)

 

 

Правило квалифицированного вызова, приведенное для процедур, применимо также к вызовам функций.

 

 

Зарезервированное слово Current означает текущий экземпляр класса и может использоваться в выражении. Само Current - тоже выражение, а не сущность, допускающая запись. Значит присваивание Current , например, Current := some_value будет синтаксически неверным.

При ссылке на компонент (атрибут или программу) текущего экземпляра нет необходимости писать Current.f , достаточно написать f . Поэтому Current используется реже, чем в ОО-языках, где каждая ссылка на компонент должна быть явно квалифицированной. (Например, в Smalltalk компонент всегда квалифицирован, даже когда он применим к текущему экземпляру.) Случаи, когда надо явно называть Current включают:

[x]. Передачу текущего экземпляра в качестве аргумента в программу, как в a.f (Current) . Обычное применение - создание копии (duplicate) текущего экземпляра, как в x: = clone (Current) .

[x]. Проверку,- присоединена ли ссылка к текущему экземпляру, как в проверке x = Current .

[x]. Использование Current в качестве опорного элемента в "закрепленном объявлении" в форме like Current (лекция 16).

 

 

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

Унарные операторы + и - применяются к целым и вещественным выражениям и не применяются к булевым выражениям.

Бинарные операторы, имеющие точно два операнда, включают операторы отношения:

 

= /= < > <= >=

 

 

где /= означает "не равно". Значение отношения имеет булев тип.

Выражения могут включать один или несколько операндов, соединенных операторами. Численные операнды могут соединяться следующими операторами:

 

+ - . / ^ // \

 

 

где // целочисленное деление, \ целый остаток, а ^ степень (возведение в степень).

Булевы операнды могут соединяться операторами: and , or , xor , and then , or else , implies . Последние три объясняются в следующем разделе; xor - исключающее или.

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

 

 

Операторы and then и or else (названия заимствованы из языка Ada), а также implies не коммутативны и называются нестрогими (non-strict) булевыми операторами. Их семантика следующая: