При ссылке на компонент (атрибут или программу) текущего экземпляра нет необходимости писать
[x].
Передачу текущего экземпляра в качестве аргумента в программу, как в[x].
Проверку,- присоединена ли ссылка к текущему экземпляру, как в проверке[x].
ИспользованиеВыражения с операторами
Выражения могут включать знаки операций или операторы.
Унарные операторы
Бинарные операторы, имеющие точно два операнда, включают операторы отношения:
= /= < > <= >=
где
Выражения могут включать один или несколько операндов, соединенных операторами. Численные операнды могут соединяться следующими операторами:
+ - . / ^ // \\
где
Булевы операнды могут соединяться операторами: and
, or, xor, and then, or else, implies. Последние три объясняются в следующем разделе; xor - исключающее или.Предшествование операторов, основанное на соглашениях обычной математики, строится по "Принципу Наименьшей Неожиданности". Во избежание неопределенности и путаницы, в книге используются скобки, даже там, где они не очень нужны.
Нестрогие булевы операторы
Операторы and then
и or else (названия заимствованы из языка Ada), а также implies не коммутативны и называются нестрогими (non-strict) булевыми операторами. Их семантика следующая:Нестрогие булевы операторы
[x]. a and then b
ложно, если[x]. a or else b
истинно, если[x]. a implies b
имеет то же значение, что и: (not a) or else b.Первые два определения, как может показаться, дают ту же семантику, что и and
и or. Но разница выявляется, когдаИтак, нестрогие операторы могут давать результат, когда стандартные не дают его. Типичный пример:
(i /= 0) and then (j // i = k)
которое, согласно определению, ложно, если
1
Если компилятор создает код, вычисляющий оба операнда, то во время выполнения произойдет деление на ноль, и возникнет исключительная ситуация.2
Если же генерируется код, вычисляющий второй операнд только тогда, когда первый истинен, то приДля гарантии интерпретации (2), используйте and then
. Аналогично,(i = 0) or else (j // i /= k)
истинно, если
Можно недоумевать, почему необходимы два новых оператора - не проще и не надежнее ли просто поддерживать стандарт операторов and
и or и принимать, что они означают and then и or else? Это не изменило бы значение булева выражения, когда оба оператора определены, но расширило бы круг случаев, где выражения могут получить непротиворечивое значение. Именно так некоторые языки программирования, в частности, ALGOL, W и C, интерпретируют булевы операторы. Однако есть теоретические и практические причины сохранять два набора различных операторов.[x].
С точки зрения теории, стандартные математические булевы операторы коммутативны: a and b всегда имеет значение такое же, как b and a, в то время как a and then b может быть определенным, когда b and then a не определено. Когда порядок операндов не имеет значения, предпочтительно использовать коммутативный оператор.Вильям Л Саймон , Вильям Саймон , Наталья Владимировна Макеева , Нора Робертс , Юрий Викторович Щербатых
Зарубежная компьютерная, околокомпьютерная литература / ОС и Сети, интернет / Короткие любовные романы / Психология / Прочая справочная литература / Образование и наука / Книги по IT / Словари и Энциклопедии