[x]. С точки зрения практики, некоторые оптимизации компилятора становятся невозможными, если требуется, чтобы компилятор вычислял операнды в заданном выражением порядке, как в случае с некоммутативными операторами. Поэтому лучше использовать стандартные операторы, если известно, что оба операнда определены.
Отметим, что можно смоделировать нестрогие операторы посредством условных команд на языке, не включающем такие операторы. Например, вместо
b := ((i /= 0) and then (j // i = k))
можно написать
if i = 0 then b := false else b := (j // i = k) end
Нестрогая форма, конечно, проще. Это особенно ясно, когда она используется как условие выхода из цикла:
from
i := a.lower
invariant
-- Для всех элементов из интервала [a.lower .. i - 1], (a @ i) /= x
variant
a.upper - i
until
i > a.upper or else (a @ i = x)
loop
i := i + 1
end;
Result := (i <= a.upper)
Цель - сделать
Решение без нестрогих операторов будет неэлегантным.
Другой пример - утверждение, например, инварианта класса, выражающее, что первое значение списка
l.empty or else l.first >= 0
При использовании or инвариант был бы некорректен. Здесь нет способа написать условие без нестрогих операторов (кроме написания специальной функции и вызова ее в утверждении). Базовые библиотеки алгоритмов и структур данных содержат много таких случаев.
Оператор implies, описывающий включения, также нестрогий. Форма implies менее привычна, но часто более ясна, например, последний пример выглядит лучше в записи:
(not l.empty) implies (l.first >= 0)
Строки
Класс
Строковая константа записывается в двойных кавычках, например,
"ABcd Ef ~*_ 01"
Символ двойных кавычек должны предваряться знаком
Неконстантные строки также являются экземплярами класса
text1, text2: STRING; n: INTEGER;
...
create text1.make (n)
динамически размещает строку
На экземплярах
Присваивание строк означает разделение (sharing): после
Константную строку можно объявить как атрибут:
message: STRING is "Your message here"
Ввод и вывод
Два класса библиотеки KERNEL обеспечивают основные средства ввода и вывода:
Среди операций, определенных для объекта
create f.make ("name") -- Связывает f с файлом по имени name.
f.open_write -- Открытие f для записи
f.open_read -- Открытие f для чтения
f.put_string ("A_STRING") -- Запись данной строки в файл f
Операции ввода-вывода стандартных файлов ввода, вывода и ошибок, можно наследовать из класса
Лексические соглашения
Идентификатор - это последовательность из символа подчеркивания, буквенных и цифровых символов, начинающаяся с буквы. Нет ограничений на длину идентификатора, что позволяет сделать ясными имена компонентов и классов.
Вильям Л Саймон , Вильям Саймон , Наталья Владимировна Макеева , Нора Робертс , Юрий Викторович Щербатых
Зарубежная компьютерная, околокомпьютерная литература / ОС и Сети, интернет / Короткие любовные романы / Психология / Прочая справочная литература / Образование и наука / Книги по IT / Словари и Энциклопедии